解法:
1.有兩個佇列q1和q2,先往q1內插入a,b,c,這做的都是棧的push操作。
2.現在要做pop操作,即要得到c,這時可以將q1中的a,b兩個元素全部dequeue並存入q2中,這時q2中元素為a,b,對q1再做一次dequeue操作即可得到c。
3.如果繼續做push操作,比如插入d,f,則把d,f插入到q2中,
4.此時若要做pop操作,則做步驟2
5.以此類推,就實現了用兩個佇列來實現乙個棧的目的。
注意在此過程中,新push進來的元素總是插入到非空佇列中,空佇列則用來儲存pop操作之後的那些元素,那麼此時空佇列不為空了,原來的非空佇列變為空了,總是這樣迴圈。
對於push和pop操作,其時間為o(n).
#include#include#include#includeusing namespace std;
template class cstack
; ~cstack(void){};
void push(const t& node);
t pop();
private:
queuequeue1;
queuequeue2;
};//插入元素
template void cstack::push(const t& node)
//佇列的限制性,只能在隊尾插入元素,在隊頭刪除元素。
template t cstack::pop()
t&data=queue2.front();//將queue2中的那個最後的元素直接取出後再pop 掉。
queue2.pop();
return data;
} else//如果queue2為空
t& data=queue1.front();
queue1.pop();
return data;
}}
用兩個棧實現乙個佇列功能
1 c 實現 include includeusing namespace std 使用兩個堆疊實現佇列 s1 實現入隊,s2 實現出隊 首先,將資料存放在棧s1中,然後將資料push進s2中,再將s2中的資料pop 出佇列 1 如果棧b不為空,直接彈出棧b的資料 2 如果棧b為空,則依次彈出棧a的...
用兩個棧實現乙個佇列 用兩個佇列實現乙個棧
做題之前,我們先來回顧一下 棧和佇列的相同點以及不同點 便於做題時的應用!1.區別與聯絡 相同點 1 棧和佇列都是控制訪問點的線性表 2 棧和佇列都是允許在端點處進行資料的插入和刪除的資料結構 不同點 1 棧遵循 後進先出 lifo 的原則,即只能在該線性表的一頭進行資料的插入和刪除,該位置稱為 棧...
用兩個棧實現乙個佇列,用兩個佇列實現乙個棧
t deletehead 頭部刪除節點 while s1.empty t ret s2.top s2.pop return ret private stacks1 stacks2 問題2 用兩個佇列實現乙個棧 問題分析 用兩個佇列實現乙個棧,刪除時,由於佇列是先進先出的,而棧是後進先出,因此假設現在...