用兩個棧如何實現佇列?

2021-07-25 04:19:29 字數 609 閱讀 7659

在網上無意間看到了這個問題,記錄一下。

首先,回憶一下棧與佇列的區別。棧,就是後進先出,而佇列,則是先進先出。可見,棧與佇列只是在彈出資料的順序上有區別。這也正是為什麼要用兩個棧來做佇列。

假如有a、b兩個棧,棧既然是後進先出,那麼最先進棧資料的就會在棧a的底部,如何讓它能先出棧?這就需要使用第二個棧b,如果將棧a的元素不斷彈出,再壓入棧b裡,是否棧a底層的元素就跑到棧b上層了?

可以看出,入隊操作只需將資料壓入棧a裡,出隊操作則只需直接彈出乙個棧b元素就行了。

根據以上原理,就有兩個方案。

1. 入隊操作就是將資料壓入棧a。出隊操作時,先將棧a的資料全部彈出並壓入棧b,然後從棧b裡彈出乙個元素,則為出隊的元素。

以上方案問題就在出隊操作上,需要在兩個堆疊之間倒資料。第二種方案就考慮到,如果是連續多次出隊操作,那麼我們將棧b的元素倒回棧a裡的操作完全是多餘的。所以,只改變出隊操作方案。

2. 入隊就是將資料壓入棧a。出隊時,檢查棧b是否為空,如果不為空,那麼就直接彈出資料,如果為空,那麼就該再把棧a裡的資料給倒入進棧b了。這樣,就極大的減少了倒棧的操作次數。

最後,最重要的,是要考慮異常情況。當棧為空時,進行出隊操作就會導致異常出現,所以,程式裡一定要進行檢測,這是基本素質!

用兩個棧實現佇列 用兩個佇列實現棧

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...

用兩個棧實現佇列與用兩個佇列實現棧

pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...

用兩個棧實現佇列 與 用兩個佇列實現棧

用兩個棧實現乙個佇列的功能?要求給出演算法和思路 分析 入隊 將元素進棧a 出隊 判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進棧b,棧b出棧 如果不為空,棧b直接出棧。用兩個佇列實現乙個棧的功能?要求給出演算法和思路 分析 入棧 將元素進佇列a 出棧 判斷佇列a中元素的個數是否...