兩個佇列實現乙個棧

2021-08-18 17:21:59 字數 1223 閱讀 9996

之前寫過通過兩個棧來實現乙個佇列的情況,今天是兩個佇列實現乙個棧,其實還是之前說的,佇列和棧的區別還是本質上的對資料操作的區別,棧是只能在棧頂位置進行操作,隊則是隊尾插入元素,隊頭刪除元素。

這是兩個隊。還是同樣選取其中乙個隊當做入資料的,因為棧是先進後出,所以當你入資料的佇列完成入資料的時候,如果想出就需要借用q2佇列,

依次入四個元素1、2、

3、4,這時候如果想出元素的話,要出的是最後進的元素

4,和兩個棧實現佇列不同,兩個隊再怎麼倒過來倒過去,

1先進入

q1,倒入

q2的話那一定是先從

q1出,所以先進入

q2,所以再出依然是先出

1,所以這樣是不能實現的。

如果要是想出最後乙個入的元素4的話就需要先將他前邊的元素,放到

q2中。

在輸出結束之後,因為你入元素一直都是入到q1中,所以在你輸出之後,需要將

q2中元素,在倒入到q1中

也就是q2還是空的,

q1中已經把最後乙個元素出去了。這時候入元素的話還是直接入就可以。

void stackbytwoqueuepush(queue *s1, queue *s2, datatype m)

入元素的話直接在s1中入元素就可以。

void stackbytwoqueuepop(queue *s1, queue *s2)

{int size = 0;

int i = 0;

if (queuesize(s1) != 0)

{ size = queuesize(s1);

for ( i = 0; i

如果要是出元素的話,首先要將s1中的資料放到s2中,在s1中留乙個最後的資料,然後將這個資料賦值給num將num輸出即可。在輸出結束之後還要將s2中的所有資料返回到s1中。

兩個棧實現乙個佇列 兩個佇列實現乙個棧

這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將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...