最近筆試遇到這個問題,感覺蠻有意思的,分析看看
一、問:用兩個棧實現乙個佇列的功能,要求給出演算法和思路
示意圖
答:設2個棧a,b,初始化為空
入隊:將新元素push
入棧a;
出隊:(1) 判斷棧b是否為空;
(2) 如果不為空,則將棧a中所有元素依次pop
出並push
到棧b;
(3) 將棧b的棧頂元素pop出;
說明:
利用棧的兩次先進後出實現佇列的先進先出還是蠻有意思的。同時,這樣實現的隊列入隊和出隊的平攤複雜度都還是0(1)
二、問:用兩個佇列實現乙個棧的功能
示意圖
答:設2個佇列a,b,初始化為空
入棧:將新元素hello
入棧到佇列a中;
入隊:(1) 將佇列a中,除了隊尾o
以外的hell
依次出隊a,併入隊到佇列b;
(2) 此時佇列a中只剩o
出棧:將o
元素進行佇列的出隊,完成棧的出棧操作
反覆進行多次,即可實現棧的先進後出的特點
挖個坑,後續補這兒的**說明
用兩個棧實現佇列 用兩個佇列實現棧
劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...
兩個棧實現佇列及兩個佇列實現棧
用兩個棧實現佇列的push 和 pop include include include using namespace std template class cqueue cqueue t deletehead private stack stack1 stack stack2 template t...
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...