由于一些奇怪的原因,每当我打印反向堆栈的大小(用于测试目的)时,我会继续得到7.为什么会这样?反向堆栈是否应该是空的,因为没有任何东西被推到它上面?谢谢!
public class QueueViaStacks {
static Stack original;
static Stack reversed;
// push everything into the first stack
public void enqueue(Object item) {
// create stack if it is not yet created
if (original == null)
original = new Stack();
original.push(item);
}
public Object dequeue() {
if (reversed == null)
reversed = new Stack();
System.out.println(reversed.size);
Object temp;
// reverse stack by copying everything from first stack to second stack
if (reversed.isEmpty()) {
while (original != null) {
temp = original.pop();
reversed.push(temp);
}
}
return reversed.pop();
}
public int size() {
return original.getSize() + reversed.getSize();
}
public static void main(String[] args) {
QueueViaStacks stack = new QueueViaStacks();
stack.enqueue('T');
stack.enqueue('E');
stack.enqueue('S');
stack.enqueue('T');
stack.enqueue('I');
stack.enqueue('N');
stack.enqueue('G');
stack.dequeue();
}
}
下面是我的Stack类:
public class Stack {
static Node top;
static int size = 0;
public void push(Object item) {
Node t = new Node(item);
t.next = top;
top = t;
size++;
}
public Object pop() {
while (top != null) {
Object temp = top.item;
top = top.next;
size--;
return temp;
}
return null;
}
public int getSize() {
return size;
}
public boolean isEmpty() {
if (size == 0)
return true;
return false;
}
public void print(Stack stack) {
Node temp = top;
while (temp != null) {
System.out.println(temp.item);
temp = temp.next;
}
}
}
答案 0 :(得分:1)
我使用java.util.Stack尝试了你的代码,它在java.util.Stack中运行良好。此外,您正在从dequeue方法直接访问Stack的大小变量(如果它是java.util.Stack则不可能),并使用getSize()来获取堆栈的大小(对于java.util.Stack,您必须使用而不是size()方法。。有了这些证据,我假设你已经实现了自己的Stack类。最可能的错误来自Stack类的实现。请查看您的Stack类。如果您想要更具体的答案,您应该指定是否已经实现了自己的Stack类。如果是,您应该提供Stack和其他相关类的实现。
P.S:您的出列方法无效。请遵循Alin Gabriel的建议。如果你的堆栈中没有isEmpty()方法,你可以使用original.getSize()> 0代替!original.isEmpty()
答案 1 :(得分:0)
while (original != null)
这是一个错误。你应该测试原件是不是空的:-) 实际上,您正在检查原始实例是否已实例化。
while(!original.isEmpty()) {
reversed.push(original.pop());
}