用兩個棧模擬佇列

2021-09-26 13:50:16 字數 522 閱讀 8231

問題:如何用兩個堆疊模擬實現乙個佇列? 如果這兩個堆疊的容量分別是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 ...