棧是後進先出的資料結構,只允許在其一端進行插入和刪除操作,允許插入和刪除的一端稱為棧頂,另一端為棧底,棧的的基本操作為:入棧,出棧,返回棧頂元素,判斷棧是否為空,
佇列是先進先出的資料結構,只允許在其一端進行插入操作,而在另一端進行刪除操作,允許刪除的一端稱為隊頭,允許插入的一端稱為隊尾 佇列的基本操作為 : 入隊,出隊,返回隊頭元素,判斷佇列是否為空。
用兩個棧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...