劍指 Offer 09 用兩個棧實現佇列

2021-10-13 20:56:04 字數 1081 閱讀 2026

劍指 offer 09. 用兩個棧實現佇列

輸入:[,[3],,]

這個表示每一行**操作所需要的引數

以上的輸入其實是乙個**執行的步驟描述與其對應所需引數。

即兩個緯度:

1、操作描述

2、此次操作所需引數

3、操作描述與操作所需引數是通過預設順序一一對應的。

棧後進先出,佇列先進先出

雙棧可以實現序列倒置:假設有 stack1=[1, 2, 3] 、 stack2= ,如果迴圈出棧 stack1 並將出棧元素進棧 stack2 ,則迴圈結束後, stack1= 、 stack2=[3, 2, 1] ,即通過 stack2 實現了 stack1 中元素的倒置

當需要刪除隊首元素時,僅僅需要 stack2 出棧即可;當 stack2 為空時,出隊就需要將 stack1 元素倒置倒 stack2 , stack2 再出隊即可;如果 stack1 也為空,即佇列中沒有元素,返回 -1

var

cqueue

=function()

;/**

* @param value

* @return

*/cqueue.prototype.

=function

(value)

/** * @return

*/cqueue.prototype.

deletehead

=function()

if(!this

.stack1.length)

return-1

while

(this

.stack1.length)

return

this

.stack2.

pop()}

;/**

* your cqueue object will be instantiated and called as such:

* var obj = new cqueue()

* var param_2 = obj.deletehead()

**/

劍指 Offer 09 用兩個棧實現佇列

劍指 offer 09.用兩個棧實現佇列 示例 1 輸入 3 輸出 null,null,3,1 示例 2 輸入 5 2 輸出 null,1,null,null,5,2 上大二時候就學的老經典了。思路 宣告兩個棧s1,s2。入佇列操作等同於入棧s1。出佇列操作分三種情況 1.兩個棧都為空,意味著隊列為...

劍指offer 09 用兩個棧實現佇列

示例 1 示例 2 這個地方有點繞,需要注意的是 當stack2不為空時,佇列中的元素都在stack2中 stack2中都是待刪除的元素 無論stack1中是否有元素都從2中彈出元素 頻繁的插入和刪除首選linkedlist,通常情況下不推薦使用vector和及其子類stack class cque...

劍指 Offer 09 用兩個棧實現佇列

該題使用兩個棧,乙個用於存資料,乙個用於取資料,而棧的思路是後進先出,佇列的思路是先進先出,所以需要在插入資料時將所有資料放入a棧,如果此時需要取出資料,那麼就將a內的資料都pop到b中去,假如現在我們插入了 1,2,3 到a中,那麼此時呼叫取資料的函式,將會把資料轉存到b中,b中的資料就為 3,2...