使用Java中的堆栈创建队列

时间:2017-12-03 22:06:55

标签: java stack queue push pop

对于赋值,我必须使用堆栈创建一个队列,但我不确定这个代码我做错了什么。我创建了一个主要的,替代的和临时的堆栈。每次推送,我都希望将值添加到替代中,并且当前在primary中的所有内容都会被临时弹出。然后,从临时开始,我希望将所有值都弹出替代,然后更改变量,以便替代是主堆栈。现在,当我运行它来测试输入到堆栈中的多个值时,我得到一个没有输出的无限循环。我现在已经坚持了一段时间,所以我希望我能在这里得到一些帮助。这是代码。

Stack<Integer> mainStack = new Stack<Integer>();
Stack<Integer> altStack = new Stack<Integer>();
Stack<Integer> tmpStack = new Stack<Integer>();
public void push(int x) {
    altStack.add(x);
    while (mainStack.empty() == false){
        tmpStack.push(mainStack.pop());
    }
    while(tmpStack.empty() == false) {
        altStack.push(tmpStack.pop());
    }

    mainStack = altStack;
    altStack = tmpStack;

}

public int pop() {
    return mainStack.pop();
}

public int peek() {
    return mainStack.peek();
}

public boolean empty() {
    return mainStack.empty();
}

1 个答案:

答案 0 :(得分:0)

因此,您的想法似乎是将所有内容从一个堆栈推送到另一个堆栈以反转元素的顺序。我无法看到你如何得到一个无限循环,因为你总是弹出并做到空。但是两个队列足以用你的想法来解决这个问题:

Stack<Integer> mainStack = new Stack<>(); // elements pop in correct order
// the fake queue so to speak

public void push(int x) {
    Stack<Integer> stack = new Stack<>(); // temporary stack
    // reverse main stack
    while (!mainStack.empty())
        stack.push(mainStack.pop());
    // add x first (at the bottom) of the now empty main stack
    mainStack.push(x);
    // add the rest of the elements to main stack (preserving original order,
    // by reversing the elements again)
    while (!stack.empty())
        mainStack.push(stack.pop());
}