兩個棧實現一個佇列,兩個佇列實現一個棧
阿新 • • 發佈:2018-12-09
1、兩個棧實現一個佇列
入隊時,直接壓入stack1中。
出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。
//入隊操作 void EnQueue(stack<int> &s1,stack<int> &s2,int m) { s1.push(m); } //出隊操作 void DeQueue(stack<int> &s1,stack<int> &s2,int &m) { if (s2.empty()) { int p = s1.size(); for (int i=0;i<p;i++) { s2.push(s1.top()); s1.pop(); } } m = s2.top(); s2.pop(); }
2、兩個佇列實現一個棧
將queue1用作進棧出棧,queue2作為一箇中轉站。
入棧時,直接壓入queue1中。
出棧時,先將queue1中的元素除最後一個元素外依次出佇列,並壓入佇列queue2中,將留在queue1中的最後一個元素出佇列即為出棧元素,最後還要把queue2中的元素再次壓入queue1中。
實現程式碼如下:
//進棧操作 void stackpush(queue<int> &q1,queue<int> &q2,int m) { q1.push(m); } //出棧操作 void stackpop(queue<int> &q1,queue<int> &q2,int &m) { int p = q1.size(); for (int i=0;i<p-1;i++) { q2.push(q1.front()); q1.pop(); } m = q1.front(); q1.pop(); int l = q2.size(); for (int j = 0;j<l;j++) { q1.push(q2.front()); q2.pop(); } }