【劍指offer第8題】用兩個棧實現佇列
阿新 • • 發佈:2020-07-15
【題目】
請用棧實現一個佇列,支援如下四種操作: 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中“出隊”。
【程式碼】