1. 程式人生 > >1.2由兩個棧組成的佇列

1.2由兩個棧組成的佇列

題目

編寫一個類,用兩個棧實現,支援佇列的基本操作(add、poll、peek)。

思路

一個棧作為壓入棧,另一個棧作為彈出棧。

要做到:

  1. 如果stackPush要往stackPop中壓入資料,那麼必須一次性把stackPush中的資料全部壓入。
  2. 如果stackPop不為空,stackPush絕對不能向stackPop中壓入資料。
程式碼實現
public class TwoStacksQueue {
    public Stack<Integer> stackPush;
    public Stack<
Integer>
stackPop; public TwoStacksQueue() { stackPush = new Stack<>(); stackPop = new Stack<>(); } public void add(int pushInt) { stackPush.push(pushInt); } public int poll() { if (stackPush.isEmpty() && stackPop.isEmpty(
)) { throw new RuntimeException("Queue is empty!"); } else if (stackPop.isEmpty()) { while (!stackPush.isEmpty()) { stackPop.push(stackPush.pop()); } } return stackPop.pop(); } public int peek() { if (stackPush.
isEmpty() && stackPop.isEmpty()) { throw new RuntimeException("Queue is empty!"); } else if (stackPop.isEmpty()) { while (!stackPush.isEmpty()) { stackPop.push(stackPush.pop()); } } return stackPop.peek(); } }