如何仅用栈结构实现队列结构?
使用两个栈(一个压入栈,一个弹出栈)实现一个队列。要注意在弹出元素栈的地方要注意栈的变化,每次压入栈中的元素移动到弹出栈时,要全部移动。当弹出栈中有元素的时候,不能从压入栈中移动元素到弹出栈中。
1 一个pop栈、一个push栈;数据都进入push栈里;
2 需要开始出队列的时候,将push栈里的所有数都倒入pop栈中,然后pop栈出栈即可
3 如果再输入数据,则还是压入push栈里
4 注意,倒数据的前提1是pop栈为空,否则顺序出错。
5 注意,倒数据的前提2是一次倒完.
public static class TwoStacksQueue { private Stack stackPush; private Stack stackPop; public TwoStacksQueue() { stackPush = new Stack(); stackPop = new Stack(); } public void push(int pushInt) { stackPush.push(pushInt); } public int poll() { if (stackPop.empty() && stackPush.empty()) { throw new RuntimeException("Queue is empty!"); } else if (stackPop.empty()) { while (!stackPush.empty()) { stackPop.push(stackPush.pop()); } } return stackPop.pop(); //之前的判断和循环主要是为了确保pop栈里的正确 } public int peek() { if (stackPop.empty() && stackPush.empty()) { throw new RuntimeException("Queue is empty!"); } else if (stackPop.empty()) { while (!stackPush.empty()) { stackPop.push(stackPush.pop()); } } return stackPop.peek(); } public void dao(){ if(lstackPop.isEmpty() { return; } while(!stackPush.isEmpty()){ stackPop.push(stackpush.pop()); } } }