兩個棧實現乙個佇列

2021-07-02 23:09:04 字數 1259 閱讀 6542

棧是後進先出的資料結構,只允許在其一端進行插入和刪除操作,允許插入和刪除的一端稱為棧頂,另一端為棧底,棧的的基本操作為:入棧,出棧,返回棧頂元素,判斷棧是否為空,

佇列是先進先出的資料結構,只允許在其一端進行插入操作,而在另一端進行刪除操作,允許刪除的一端稱為隊頭,允許插入的一端稱為隊尾   佇列的基本操作為 :  入隊,出隊,返回隊頭元素,判斷佇列是否為空。

用兩個棧stack1,stack2 來模擬佇列的入隊和出隊。將      a,b,c,d 依次入隊    a---->b----->c------>d,出隊的順序為   a,b,c,d;

用棧stack1來模擬入隊,入隊的元素壓入stack1,    將,a,b,c,d 入隊即為,將a,b,c,d 壓入棧stack1中,此時stack2為空棧。  a,b,c,d 出隊時,由於佇列先進先出的特性。最先出隊的為a  此時可以將stack1 的元素全部出棧壓入棧stack2 中,此時,stack2 從棧頂到棧底的元素順序依次為 a ,b,c,d ; 與元素出隊的順序一致,元素出隊即從stack2出棧即可。

當佇列進行出隊操作時而恰好stack2 為空時,需要判斷stack1是否為空,若為空則表示此時佇列中無元素為空佇列,若stack1不空則將棧stack1中的所有元出棧後壓入stack2中。

再用stack2的出棧操作來模擬佇列的出隊操作。

#include#include#include#include#include#includeusing namespace std;

templateclass myqueue

; void push(const t& node);

t pop();

~myqueue(){};

bool empty();

private:

stackstack1;//棧stack1模擬入隊時用

stackstack2;//棧stack2模擬出隊時用

};templatevoid myqueue::push(const t&node)

templatet myqueue::pop()

}if(stack2.empty())

t head=stack2.top();

stack2.pop();

return head;

}templatebool myqueue::empty()

else }

int main()

while(!test.empty())

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

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