棧後進先出,佇列先進先出。
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中再出棧,這樣元素的位置將倒置,實現先入先出的功能。操作 入隊 ...