编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)
add():增加一个元素
poll():移除并返回队列头部元素
peek():返回头部元素
public class TwoStackQueue{ public Stack<Integer> stackPush; public Stack<Integer> stackPop; public TwoStackQueue() { stackPush = new Stack<Integer>(); stackPop = new Stack<Integer>(); } /*两个栈组成队列需要注意两个错误:1:stackPush队列元素未完全放入stackPop中却 被压入新元素2:stackPop元素未清空却放入新元素。 */ private void pushToPop(){ if (stackPop.empty()){ while (!stackPush.empty()){ stackPop.push(stackPush.pop()); } } } //压入一个元素 public void add(int pushInt){ stackPush.push(pushInt); pushToPop(); } //返回并移除顶层元素 public void poll(){ if (stackPop.empty() && stackPush.empty()){ throw new runtimeException("Queue is empty!"); } pushTopop(); return stackPop.pop(); } //仅返回顶层元素 public void peek(){ if (stackPop.empty() && stackPush.empty()){ throw new runtimeException("Queue is empty!"); } pushTopop(); return stackPop.peek(); } }