C 演算法之 兩個佇列實現乙個棧

2021-06-27 12:48:34 字數 863 閱讀 1047

題目:用兩個佇列實現乙個棧

演算法思路:

現有兩個佇列q1與q2,入棧:如果q1與q2都為空,那麼我們選擇q1入棧也就是入佇列,比如q1入棧 1 2 3 4 ;現在要出棧,後進先出那麼4要出棧。但是q1是乙個

佇列,先進先出,那麼 1 2 3出佇列 q2 1 2 3 入佇列,q1中此時剩餘4,把4出對列達到出棧的效果。  這個時候如果我們又加入乙個元素5,那麼我們應該把5放到

q1還是q2,因為現在q2中有 1 2 3,把5放到q1不方便統計,所以要把5放入到q2;如果5放到了q1,等下編寫出棧的**很麻煩,如果放到q2我們只需要分類:q2

是不是為空,為空的為一種情況,不為空的為一種情況:

所以最後:

如果q1與q2都為空,那麼往q1中插入元素

如果q1不為空,那麼往q1中插入元素

如果q2不為空,那麼往q1中插入元素

**如下:

// stackfrom2queue.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

templateclass cstack

};templateint cstack::getnum() const

else if (q1.size()>0)//如果q1不為空,那麼往q1中插入元素

else if(q2.size()>0)//如果q2不為空,那麼往q1中插入元素

++ncount;

}templatet cstack::deletetail()

ret = q1.front();

q1.pop();

coutcout<<"元素的個數:"<

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

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