使用兩個佇列實現乙個棧

2021-06-22 12:51:44 字數 2331 閱讀 1983

先普及小知識:

stl中棧的使用方法

(stack)

基本操作:

push(x) 將x

加入棧中,即入棧操作

pop() 

出棧操作

(刪除棧頂

),只是出棧,沒有返回值

top() 

返回第乙個元素

(棧頂元素)

size() 

返回棧中的元素個數

empty() 

當棧為空時,返回

true

stl中佇列的使用

(queue)

基本操作:

push(x) 將x

壓入佇列的末端

pop() 

彈出佇列的第乙個元素

(隊頂元素

),注意此函式並不返回任何值

front() 

返回第乙個元素

(隊頂元素)

back() 

返回最後被壓入的元素

(隊尾元素)

empty() 

當隊列為空時,返回

true

size() 

返回佇列的長度

這個棧的宣告如下:

templateclassstack_by_queue

; ~stack_by_queue(){};

t delete_head();

voidshow_stack(void);//從棧頂依次向棧低顯示輸出資料

protected:

private:

queuequeue1;

queuequeue2;

};

分析:棧的特性是先進後出,舉乙個序列1,2,3,4來說,我們試著往乙個queue1裡面push進去,這時候queue1的隊頭是1,隊尾是4,這時候要實現delete_head的話,對應的棧應該刪除4,對於queue1的隊尾,前面的1,2,3,都是不需要的。實現dalete_head解決方法就是,依次彈出1,2,3並且壓入queue2中,queue1裡面只儲存4,這時候要delete_head的話,對queue1進行pop操作就行了,然後queue1為空(注意這個狀態),然後我要繼續delete_head,這個時候也是按照上面的思路,將queue2的1,2依次彈出,壓入queue1裡面,知道剩下最後乙個隊尾元素3,將它pop掉就行了!這時候的狀態是queue1不為空,queue2為空。

#include #include usingnamespace std;  

templateclassstack_by_queue

; ~stack_by_queue(){};

t delete_head();

voidshow_stack(void);

private:

queuequeue1;

queuequeue2;

}; templatevoidstack_by_queue::show_stack(void)

while(q2.size() != 1)

cout<2

if(q1.size() < 1)

while(q1.size() != 1)

coutwhile(queue2.size() != 1)

tmp = queue2.front();

queue2.pop();

returntmp;

} if(!queue1.empty() && queue2.empty())

while(queue1.size() != 1)

tmp = queue1.front();

queue1.pop();

returntmp;

} else

return-1; }

int main()

/**************************

執行結果:

this is show_stack!從棧頂到棧底顯示資料

c b a

this is show_stack!從棧頂到棧底顯示資料

a this is show_stack!從棧頂到棧底顯示資料

e d a

this is show_stack!從棧頂到棧底顯示資料

d a

this is show_stack!從棧頂到棧底顯示資料

f d a

***************************/

使用兩個佇列實現乙個棧,使用兩個棧實現乙個佇列

一 棧與佇列的特點 一 棧 棧 一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行資料插入和刪除操作的一端稱為棧頂,另一端稱為棧底。不含任何元素的棧稱為空 棧,棧又稱為後進先出的線性表。棧的特點 後進先出 lifo 二 佇列 佇列 只允許在一端進行插入資料操作,在另一端進行刪除資料操...

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

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