棧結構:先進後出,後進先出,只允許在棧尾操作。
佇列:先進先出,在隊尾入隊,在隊頭出隊。
要想用兩個棧實現乙個佇列,就需要使用乙個相當於中間量的結構進行佇列的入隊和出隊操作。
用圖形象化為:
這樣問題就從圖中得出了思路:
入隊操作:把入隊元素一一存入乙個棧結構中即可。
出隊操作:出隊時,先判斷另乙個棧結構中是否有元素,若有先將元素出棧pop();若為空,則把棧s1中的元素全部倒入push()棧s2中,然後讓s2棧頂元素出棧pop(),此時的元素序列和棧s1中剛好相反,即達到出隊效果。
那麼,用**實現也變得簡單:
#include #include using namespace std;
class queue
;int main()
如有紕漏,歡迎指正。
本文出自 「vs呂小布」 部落格,請務必保留此出處
資料結構 兩個佇列實現乙個棧
用兩個棧實現乙個佇列,這個問題與 兩個佇列實現乙個棧 原理非常的相似。只要你明白了 兩個佇列實現乙個棧 的原理,相信聰明的你,就會明白這個問題只是它的變種,所有的異或就會迎刃而解的。這裡大家可以參考我的部落格 如下 define crt secure no warnings 1 includeusi...
資料結構 兩個佇列實現乙個棧
void stackinit stack stack 初始化 void stackdestroy stack stack 銷毀 void stackprint stack stack,const char msg 列印棧 void stackpush stack stack,datatype val...
資料結構 兩個棧實現乙個佇列
棧的特性是先進後出,佇列的特性是先進先出。那麼,我們使用兩個棧,對同乙個元素進行先進後出兩次棧就形成了先進先出的順序。即乙個元素需要入棧兩次,才能被取出來。我們將put,get定義為存放元素,與取元素。使用命名為in,out的棧,in代表往佇列裡面put元素第一次入棧是進入in,out代表get元素...