劍指offer 面試題9 用兩個棧實現佇列

2021-09-25 10:21:29 字數 851 閱讀 1356

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

1.當stack2不為空時,stack2中的棧頂元素是最先進入佇列的元素,可以彈出。

2.當stack2為空時,把stack1中的元素逐個彈入並壓入stack2中,先入stack1的元素這時在stack2頂部,這時彈出stack2就完成了佇列(書上的圖更便於理解)

class solution:

def __init__(self):

self.stack1=

self.stack2=

def push(self,node):

def pop(self):

if len(self.stack2)==0 and len(self.stack1)==0:

return

elif len(self.stack2)==0:

while len(self.stack1)>0: # 把stack1的元素全部彈出,並壓入stack2

return self.stack2.pop() # 把stack2中的棧頂元素彈出,即完成了佇列

# s = solution()

# s.push(1)

# s.push(2)

# s.push(3)

# s.push(4)

# print(s.pop())

# s.push(5)

# print(s.pop())

# print(s.pop())

# print(s.pop())

# s.push(6)

# print(s.pop())

# print(s.pop())

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...

劍指offer面試題9 用兩個棧實現佇列

templateclass cqueue 佇列是先進先出,棧是先進後出。這題題目給出了兩個棧,首先假設我們往乙個棧裡面壓入了三個元素a b c。作為乙個佇列,如果我們壓入了a b c,那麼先出的會是a。但是棧彈出的會是c,那麼該怎麼輸出a呢,這裡注意到我們利用了乙個棧,還有乙個棧沒有使用,如果我們把...

劍指offer 面試題9 用兩個棧去實現佇列

題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 由於棧是後入先出,佇列是先入先出。實現時,輸入元素時,將元素壓入stack1中,刪除元素時,先將stack1中的元素出棧,全部壓入stack2中再出棧,這樣元素的位置將倒置,實現先入先出的功能。操作 入隊 ...