之前寫過通過兩個棧來實現乙個佇列的情況,今天是兩個佇列實現乙個棧,其實還是之前說的,佇列和棧的區別還是本質上的對資料操作的區別,棧是只能在棧頂位置進行操作,隊則是隊尾插入元素,隊頭刪除元素。
這是兩個隊。還是同樣選取其中乙個隊當做入資料的,因為棧是先進後出,所以當你入資料的佇列完成入資料的時候,如果想出就需要借用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...