用兩個棧實現佇列 及 兩個佇列實現棧功能

2021-10-23 21:42:56 字數 874 閱讀 1077

最近筆試遇到這個問題,感覺蠻有意思的,分析看看

一、問:用兩個棧實現乙個佇列的功能,要求給出演算法和思路

示意圖

答:設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...