先普及小知識:
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...