push(x) -- 將乙個元素放入佇列的尾部。
pop() -- 從佇列首部移除元素。
peek() -- 返回佇列首部的元素。
empty() -- 返回佇列是否為空。
myqueue queue = new myqueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
你只能使用標準的棧操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的語言也許不支援棧。你可以使用 list 或者 deque(雙端佇列)來模擬乙個棧,只要是標準的棧操作即可。
假設所有操作都是有效的 (例如,乙個空的佇列不會呼叫 pop 或者 peek 操作)。
分析:本題將用兩個棧來實現佇列的出隊和入隊操作。
如上圖1所示:入隊的順序和入棧的順序是相同的,如a中棧所示,入棧順序是1、2、3、4、5;同樣入隊順序也是1、2、3、4、5;出對的順序應該也是1、2、3、4、5,如果按照a的出棧順序的話是5、4、3、2、1,與出對順序矛盾,所以可以建立乙個臨時棧b,將a中的出棧資料存在b中,再將b中資料進行出棧操作,出棧順序為1、2、3、4、5,與出隊順序相同。讀取隊首資料:棧b的棧頂元素就是佇列的隊首元素,當棧頂元素出棧後,為了不影響後續操作,再將b中資料存入a中,如圖2所示;若此時再入隊乙個元素(1),相當於在棧a入棧乙個元素(1),在進行前面的出對操作,得到圖3的結果。
class myqueue
//入隊操作
/** push element x to the back of queue. */
public void push(int x)
//出隊操作
public int pop()
int ret = stackb.pop();
while(!stackb.isempty())
return ret; //ret就是出隊的元素,即stackb的棧定元素
}//讀取棧定元素
/** get the front element. */
public int peek()
int ret = stackb.peek();
while(!stackb.isempty())
return ret;
}/** returns whether the queue is empty. */
public boolean empty()
}
力扣 232 用棧實現佇列
一 題目描述 使用棧實現佇列的下列操作 示例 myqueue queue new myqueue queue.push 1 queue.push 2 queue.peek 返回 1 queue.pop 返回 1 queue.empty 返回 false說明 二 解題思路 建立兩個棧a和b。棧a專門用...
棧 佇列 力扣 232 用棧實現佇列
實現myqueue類 說明 示例 1 輸入 myqueue push push peek pop empty 1 2 輸出 null,null,null,1,1,false 解釋 myqueue myqueue new myqueue myqueue.push 1 queue is 1 myqueu...
力扣 225題用佇列實現棧
使用佇列實現棧的下列操作 push x 元素 x 入棧 pop 移除棧頂元素 top 獲取棧頂元素 empty 返回棧是否為空 注意 你只能使用佇列的基本操作 也就是 push to back,peek pop from front,size,和 is empty 這些操作是合法的。你所使用的語言也...