兩個棧模擬佇列

2021-08-31 08:20:29 字數 1234 閱讀 4254

演算法導論上的課後題 兩個棧模擬佇列

這個原來做過 一般是這樣 我看網上大概都是這種解法

原來棧空

a b

null null

1,2,3入站的時候入a

a b

3 null

2 null

1 null

出戰的時候先進b 然後pop b 在調過來進a

a b

null 1

null 2

null 3

繼續

a b

3 null

2 null

這樣的話 入佇列是o(1) 出佇列o(2n) 有點不平衡

我想了一種出入棧都是o(n)的 靈感是來自兩個佇列模擬棧的 主要就是互相出入佇列的時候都向另乙個棧匯入

入站的時候先把戰中的元素調到另乙個戰中 在入站 出戰的時候先pop出棧 再把剩下的元素調到另乙個戰中 還需要乙個標示那個棧是存著元素的

以1,2,3入棧為例

a b

null null

a b

1 null

a b

null 2

null 1

a b

3 null

1 null

2 null

出佇列

a b

null 2

null 1

pop = 3

再出的話

pop=2

a b

1 null

這樣 出入佇列都是o(n) 比較平衡 當然根據不同的需求再選擇不同的演算法:)

突然又想到。。這個都是能控制的 也可以入棧o(2n) 出棧o(1) 都行。。。

7 兩個棧模擬佇列,兩個佇列模擬棧

利用兩個棧模擬佇列 stack1,stack2 首先向stack1當中放入資料,如果需要輸出資料,從stack2中delete資料,如果stack2為空,就把stack1中資料匯入stack2 include static.h include include templateclass cquue ...

兩個棧模擬乙個佇列 兩個佇列模擬乙個棧

解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。include include includeusing namespace std template class cqueue 建構函式 template ...

兩個棧來模擬佇列

用兩個棧來模擬佇列,注意,當pop元素之後,不需要把元素重新恢復成原來的位置。寫了好久的c 今天終於嘗試到用template來寫類了,感覺不錯。include include templateclass queue queue 插入元素 void push datatype data 刪除元素 vo...