每日一題 36 用兩個棧實現佇列

2021-06-16 12:28:23 字數 1290 閱讀 6879

題目來自劍指offer

題目:

思路:設定兩個棧,乙個用來接收資料instack,乙個用來輸出資料outstack。

佇列空:兩個棧都為空,則佇列空

佇列滿:接收資料的instack棧滿了,而且輸出資料的outstack棧中有資料,則滿。

入隊:檢測接收資料的instack棧,是否為滿。

不滿,則直接入instack棧。滿了,檢測輸出資料的outstack是否有資料。

如果outstack棧中有資料,則表示佇列滿。如果沒資料,則把instack棧中的資料全部匯入outstack棧中。

注意:

(1)這樣可能表示隊滿,會存在空間浪費。

(2)在把

instack棧中的資料全部匯入outstack棧中時,相當於元素先從棧instack出棧,入棧到outstack中。

出佇列:

檢測輸出資料的outstack棧,是否為空。

不空,則直接出outstack棧。空了,則檢測接收資料的instack是否有資料。

如果instack

棧沒資料,則表示隊列為空,沒有資料要出。

如果instack

棧中有資料,則表示還有資料可以出,則把instack中的資料全出棧,之後再壓入outstack棧。之後再從outstack出棧。

**:

#include #include using namespace std;

const int size = 5;

class queue

;queue::queue()

/*入佇列:

判斷第乙個棧是否有滿:

第乙個棧沒有滿,往第乙個棧中插入新元素。

第乙個棧已滿,檢測第二個棧是否有元素:

第二個棧已有元素,表示佇列已滿,報錯,結束。

第二個棧沒有元素,未滿:

把第乙個棧中元素移動到第二個棧中

往第乙個棧中插入新元素。

*/ if (ntopout == 0)

else

if (ntopin > 0)

else

else }

void queue::moveintoout()

ntopout = ntopin;

ntopin = 0;

}int main()

cout<

for (int i = 0;i < 3;i++)

{ cout<

每日一題 37 兩個佇列實現棧

題目來自劍指offer 題目 兩個佇列實現棧 思路 乙個佇列存資料,另乙個佇列作為轉存資料的臨時佇列。注意 哪個佇列存資料不定,那個佇列作為臨時佇列也不定。壓棧時 找到乙個有資料的佇列,放入資料。如果兩個佇列都為空,則隨便找乙個佇列存資料。出棧時 找到那個存資料的佇列,設其資料個數為n。1 對數列執...

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

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

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

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