- Go程序員面試算法寶典
- 猿媛之家組編 董良松 楚秦等編著
- 326字
- 2019-09-16 15:11:52
2.6 如何用兩個(gè)棧模擬隊(duì)列操作
難度系數(shù):★★★☆☆
被考查系數(shù):★★★★☆
分析與解答:
題目要求用兩個(gè)棧來(lái)模擬隊(duì)列,假設(shè)使用棧A與棧B模擬隊(duì)列Q,A為插入棧,B為彈出棧,以實(shí)現(xiàn)隊(duì)列Q。
再假設(shè)A和B都為空,可以認(rèn)為棧A提供入隊(duì)列的功能,棧B提供出隊(duì)列的功能。
要入隊(duì)列,入棧A即可,而出隊(duì)列則需要分兩種情況考慮:
(1)如果棧B不為空,則直接彈出棧B的數(shù)據(jù)。
(2)如果棧B為空,則依次彈出棧A的數(shù)據(jù),放入棧B中,再?gòu)棾鰲的數(shù)據(jù)。
實(shí)現(xiàn)代碼如下:

程序的運(yùn)行結(jié)果為

算法性能分析:
這種方法入隊(duì)操作的時(shí)間復(fù)雜度為O(1),出隊(duì)列操作的時(shí)間復(fù)雜度則依賴于入隊(duì)與出隊(duì)執(zhí)行的頻率。總體來(lái)講,出隊(duì)列操作的時(shí)間復(fù)雜度為O(1),當(dāng)然會(huì)有個(gè)別操作需要耗費(fèi)更多的時(shí)間(因?yàn)樾枰獜膬蓚€(gè)棧之間移動(dòng)數(shù)據(jù))。
推薦閱讀
- Embedded Linux Projects Using Yocto Project Cookbook
- .NET之美:.NET關(guān)鍵技術(shù)深入解析
- 零基礎(chǔ)搭建量化投資系統(tǒng):以Python為工具
- Learning Real-time Processing with Spark Streaming
- Oracle 11g從入門到精通(第2版) (軟件開(kāi)發(fā)視頻大講堂)
- Apache Karaf Cookbook
- 軟件架構(gòu):Python語(yǔ)言實(shí)現(xiàn)
- WordPress 4.0 Site Blueprints(Second Edition)
- 低代碼平臺(tái)開(kāi)發(fā)實(shí)踐:基于React
- Learning Unreal Engine Android Game Development
- Building Dynamics CRM 2015 Dashboards with Power BI
- Deep Learning for Natural Language Processing
- After Effects CC技術(shù)大全
- 谷歌JAX深度學(xué)習(xí)從零開(kāi)始學(xué)
- Learning Yeoman