力扣232號題 用棧實現佇列

2021-10-05 22:12:35 字數 1583 閱讀 4104

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 這些操作是合法的。你所使用的語言也...