兩個棧實現佇列(完整理解)

2021-07-05 14:26:45 字數 1358 閱讀 8561

自己總結了兩個棧實現佇列的三種方法:

方法1:

入隊時候:將元素壓入棧s1.

出隊時候:將s1的所有元素逐個(出棧併入棧到)s2中;將s1的棧頂元素彈出作為出佇列元素。

之後再將s2的所有元素(出棧併入棧)到s1.

實用範圍:一次出佇列,一次入佇列,交替出現的情況。

優化:將s1的元素(出棧併入棧到)s2中,s1的棧底元素不用入棧到深,直接作為出隊元素。

方法2:

入隊時候:先判斷s1是否為空,如不為空,直接入棧,如果為空,將s2的所有元素(出棧併入棧)到s1,再入隊。

出隊時候:先判斷s2是否為空,如不為空,直接彈出s2的棧頂元素,如果為空,將s1的元素(出棧併入棧)s2,並將s1的棧底元素

出佇列。

實用範圍:多次出佇列,多次入佇列,沒有規律。

方法3(最高效的方法):

入隊時候:將元素直接壓入s1;

出隊時候:

先判斷s2是否為空,如不為空,直接彈出s2的棧頂元素,如果為空,將s1的元素(出棧併入棧)s2,並將s1的棧底元素

出佇列。

實用範圍:所有情況。

第三種方法難以理解的地方:如果最初s1的元素為(1,2,3,棧底到棧頂的順序,入隊4,這個時候出佇列,1出去。s1為空,再入佇列,直接放在

s1中,這個時候s2沒有空,再次出棧,直接出棧,直到s2空的時候,再倒入s1,。簡化了很多步驟。(此處個人仔細理解,原因是棧的特點)。

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

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...

兩個棧實現佇列,兩個佇列實現棧

include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...

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

一 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。二 1 自己 基本思路 乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。class solution int pop int tem...