問題:如何用兩個堆疊模擬實現乙個佇列? 如果這兩個堆疊的容量分別是m和n(m>n),你的方法能保證的佇列容量是多少?
如何模擬?
首先棧是先進後出,佇列是先進先出,因此二者的差別主要在於進出的順序。
假設有棧a(n)、b(m),當把n個資料全部放入棧a,此時a棧頂是n,棧底是1。再將a內的資料出棧存入棧b,此時棧b棧頂是1,棧底是n,再pop棧b則滿足先入先出的原則。
這個佇列最大容量是多少?
先在a存入n個資料,此時a棧頂是n,棧底是1。再在b中存入第n+1個資料。a出棧,b入棧,此時b棧底是n+1,棧頂是1。a再存入n個資料,棧頂是2n+1,棧底是n+2。綜上所述,最大容量是2n+1個資料。(若m=n則最大容量是2n)
需要注意什麼
1.將a中的資料push進b中的資料時,b中不能原本就有資料,不然會亂序
2.a中的資料必須全部push進b中,不然會亂序
3.b的容量必須大於等於a的容量
用兩個棧模擬佇列
本文參考了嚴蔚敏的 資料結構 由於佇列先進先出,而棧後進先出,用兩個棧就可以模擬佇列 include using namespace std define null 0 define ok 1 define yes 1 define no 0 define error 0 define false ...
用兩個棧模擬佇列
pragma once define ndebug include include includeusing namespace std include cmystack.h templateclass cqueue return stack2.top private stackstack1 sta...
7 兩個棧模擬佇列,兩個佇列模擬棧
利用兩個棧模擬佇列 stack1,stack2 首先向stack1當中放入資料,如果需要輸出資料,從stack2中delete資料,如果stack2為空,就把stack1中資料匯入stack2 include static.h include include templateclass cquue ...