劍指offer 09 雙棧實現佇列

2021-10-03 06:31:26 字數 710 閱讀 7687

棧:先進後出;佇列:先進先出

列表元素:[元素1 ,元素2,元素3]

棧的格式: 棧底 | 棧中 | 棧頂

佇列格式: 隊首 | 隊中 | 隊尾

操作1:佇列的插入操作(插入元素4),相當於棧頂插入元素4,即對應於入棧操作。

操作2:佇列刪除元素1,相當於在隊首刪除元素1,即刪除棧底元素1;但是,棧的插入與刪除都是在棧頂完成的,沒有對棧底的操作,所以棧底左側無法插入刪除元素1,考慮將棧倒序排列,變成如下格式:

操作3: 棧的倒序:棧頂』 | 棧中』 | 棧底』 ,這時操作2對應的刪除棧底元素1,相當於對倒序之後的棧底』進行刪除操作,符合棧的操作規律。

ps:由棧a得到逆序棧b的方法:對a進行pop操作,並將出棧的元素依次儲存在列表b中

class cqueue:

def __init__(self):

self.a, self.b = ,

def deletehead(self) -> int:

if self.b:

return self.b.pop()

if not self.a:

return -1

while self.a:

return self.b.pop()

由於問題特殊,以下分析僅滿足新增 n 個元素並刪除 n 個元素,即棧初始和結束狀態下都為空的情況。

劍指 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...