【发布时间】:2020-06-04 09:09:29
【问题描述】:
如何访问每个堆栈的顶部元素以便比较它们?我使用 (iTop,i2Top,nTop,n2Top) 因为我一直在测试以使其工作,但我似乎无法获得正确的输出。 我做错了什么?
我认为这会起作用,但事实并非如此。基本上我想引用堆栈的顶部元素,并将其与stack2的顶部元素进行比较。然后,如果它们相等,则弹出它们并对堆栈的其余部分执行相同的操作。最后,如果堆栈是空的,因为所有元素都相同并被弹出,那么堆栈确实是相同的。并推回堆栈 1 和堆栈 2。 谢谢
public Boolean sameStack(StackArray<E> s2) {
E t1, t2;
//E iTop = this.items[top];
//E i2Top= s2.items[top];
int nTop = this.top; //
int n2Top= s2.top; // nTop == n2Top is true even when elements are not equal
boolean t = true;
if(this.isEmpty() && s2.isEmpty()) {
return t;
}//if
if(this.top != s2.top) {
t = false;
return t;
}
if(this.items[top] == s2.items[s2.top]){
t1 = this.pop();
t2 = s2.pop();
t = sameStack(s2);
push(t1);
push(t2);
}
else{
t = false;
}
return t;
}
public class StackArray<E> {
private int top=-1;
private static final int MAX_ITEMS = 10;
private E items[];
@SuppressWarnings("unchecked")
public StackArray() {
items = (E[]) new Object[MAX_ITEMS];
System.out.println("Stack Created!");
}
public void push(E e) {
if (isFull()==true) {
System.out.println("Stack Full!");
}
else{
top=top+1;
items[top] = e;
}
}//Push
public E pop() {
if (isEmpty()==true) {
System.out.println("Stack Empty!");
}
else{
E e = (E) items[top];
items[top] = null;
top = top-1;
return e;
}
return null;
} //pop
public boolean isFull() {
if (top == items.length-1) {
return true;
}
return false;
} //isFull
public boolean isEmpty(){
if (top==-1) {
return true;
}
return false;
}//isEmpty
@Override
public String toString()
{
System.out.println("Array:");
System.out.print("{");
for(int i = 0; i < items.length ;i++) {
System.out.print(items[i]+" ");
}
System.out.print("}");
return "";
}//toString
public Boolean sameStack(StackArray<E> s2) {
E t1, t2;
//E iTop = this.items[top];
//E i2Top= s2.items[top];
int nTop = this.top; //
int n2Top= s2.top; // nTop == n2Top is true even when elements are not equal
boolean t = true;
if(this.isEmpty() && s2.isEmpty()) {
return t;
}//if
//This is the part I need to compare the elements
if(nTop == n2Top) {
t1 = this.pop()
t2 = s2.pop();
// t = sameStack(s2);
// push(t1);
// s2.push(t2);
}
return t;
}
public static void main(String[] args)
{
// Code reference for sameStack method
StackArray<Integer> stack = new StackArray<Integer>();
StackArray<Integer> stack2 = new StackArray<Integer>();
stack.push(111);
stack.push(222);
stack.push(7177);
// stack.push(40);
stack2.push(444);
stack2.push(555);
stack2.push(777);
// stack2.push(40);
System.out.println(stack);
System.out.println(stack2);
// //Calling comparison method
if (stack.sameStack(stack2) == true) {
System.out.println("True, both stacks are equal.");
}//if
else {
System.out.println("False, stacks are not equal.");
}//else
System.out.println(stack);
System.out.println(stack2);
}//main
}//class
【问题讨论】:
-
peek看,pop接受。 -
而不是弹出所有内容进行比较,而是创建一个返回 StackArray 数组的私有方法。您可以直接比较两个数组。
-
抱歉,我没有注意到您希望使用递归。 sameStack 的顶级版本看起来您的想法是正确的。
-
这似乎是一种非常不寻常的检查相等性的方法。您是否有理由希望使用递归和弹出/推送?
-
@sprinter 是的,这是明天到期的家庭作业,这就是我浪费了 Wholeeeeeee 一天的要求
标签: java arrays data-structures stack compare