1. 程式人生 > 實用技巧 >【劍指offer第8題】用兩個棧實現佇列

【劍指offer第8題】用兩個棧實現佇列

【題目】

請用棧實現一個佇列,支援如下四種操作:

push(x) – 將元素x插到隊尾;
pop() – 將隊首的元素彈出,並返回該元素;
peek() – 返回隊首元素;
empty() – 返回佇列是否為空;
注意:

你只能使用棧的標準操作:push to top,peek/pop from top, size 和 is empty;
如果你選擇的程式語言沒有棧的標準庫,你可以使用list或者deque等模擬棧的操作;
輸入資料保證合法,例如,在佇列為空時,不會進行pop或者peek等操作;
樣例
MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek();  // returns 1
queue.pop();   // returns 1
queue.empty(); // returns false

【思路】

本題就是將兩個“先入後出”實現為一個“先入先出”的結構。給兩個棧命名為A和B,其中A作為“入隊”使用,B作為“出隊”使用,需要滿足如下的要求:

(1)“出隊”操作時,如果B不為空,則直接從B“出隊”,如果B此時為空,而A不為空,那麼一定要將A中的元素全部入棧到B中,然後再從B中“出隊”。

【程式碼】