演算法導論上的課後題 兩個棧模擬佇列
這個原來做過 一般是這樣 我看網上大概都是這種解法
原來棧空
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...