'''棧:先進後出
佇列:先進先出
'''
'''思路兩個棧實現乙個佇列 思路:兩個棧(都是先進後出),push新增資料的時候,將data資料push到stack1 中,pop資料的時候,先判斷stack2種是否有資料
如果有資料的話,直接pop() stack2中的資料(因為pop是直接彈出最後乙個資料),如果stack2中沒有資料,則將stack1中的資料,push到stack2種去
'''
classstacktoqueue:
def__init__
(self):
self.stack1=
self.stack2=
defpush(self,data):
'''push資料到stack1
:return:
'''
defpop(self):
if len(self.stack2)==0 and len(self.stack1)==0:
return
elif len(self.stack2)==0:
while len(self.stack1)>1:
return
self.stack2.pop()
s=stacktoqueue()
思路:佇列是先進先出,棧是先進後出元素入佇列a
判斷如果佇列a只有乙個元素,則直接出隊。否則,把隊a中的元素出隊併入隊b,直到隊a中只有乙個元素,再直接出隊。為了下一次繼續操作,互換隊a和隊b。
classqueuetostack:
def__init__
(self):
self.queue1=
self.queue2=
#元素push進入queue1
defpush(self,data):
defpop(self):
if len(self.queue1)==0:
return
none
while len(self.queue1)!=1:
#
#交換1和2 此時 ,queue1裡面是有資料的,而queue2 是沒有資料,那麼下次pop的時候,還是會while 將queue1的資料全部新增到
#queue2 中,那queue2 將保持最先進入的資料在列表的最後,最後進入的資料在列表的第0項 所以這裡應該是這麼理解的。
self.queue1,self.queue2=self.queue2,self.queue1
return self.queue2.pop()
兩個棧實現乙個佇列 兩個佇列實現乙個棧
這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...
兩個棧實現乙個佇列,兩個佇列實現乙個棧
1 兩個棧實現乙個佇列 入隊時,直接壓入stack1中。出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。入隊操作 void enqueue stack s1,stack s2,int m 出隊操作 void deq...
兩個棧實現乙個佇列 兩個佇列實現乙個棧
方法一 public class main 出棧操作 public int deletehead while stack1.isempty return stack2.pop 方法二 public class main public int deletehead throws exception i...