兩個棧實現佇列

2021-12-30 05:29:59 字數 1150 閱讀 2937

問題:已知下面stack類以及其三個方法push、pop和count,請用兩個stack實現queue類的入隊和出隊的方法

這道題在面試**現主要考察三點:

1、在短時間內,能不能找到這道題足夠清晰的思路(思維的敏捷和清晰)

2、能不能在單向表述中,清楚的描述自己的思路和想法(表達能力)

3、對於一些具體的細節能否考慮到

大多數人的思路為:

入隊時:將元素壓入s1

出隊時:將s1的元素逐個彈出並壓入s2中,將s2的頂元素作為出隊元素,之後再將s2剩下的元素逐個倒回s1中

優化:在出隊的時候,不用全部倒入到s2中,因為可以將最後乙個元素直接彈出,可以減少一次壓棧的操作

變種思路:

入隊時:先判斷s1是否為空,如果不為空,說明元素都在s1中,此時將入隊元素直接壓入s1中;如果為空,要將s2中的元素倒回s1中再壓入入隊元素

出隊時:先判斷s2是否為空,如果不為空,直接將s2的頂元素出隊;如果為空,將s1的元素逐個倒入s2中,並把最後乙個元素直接彈出並出隊。

最終變種思路:

入隊時:將元素壓入s1

出隊時:判斷s2是否為空,如不為空,則直接彈出頂元素;如果為空,則將s1的元素逐個倒入到s2中,並把最後乙個元素彈出並出隊

以上幾個思路還需要考慮到一種情況,就是沒有元素可供出隊時的處理(兩個棧都為空的時候,出隊一定會引起異常)

**如下:

class solution

int pop()

}a = stack2.top();

stack2.pop();

return a;

}private:

stack stack1;

stack stack2;

};拓展:用兩個隊實現乙個棧的功能

思路:入棧:將元素進佇列a

出棧:判斷佇列a中元素的個數是否為一,如果等於一,則出佇列,否則將佇列a中的元素依次出佇列並放入佇列b中

直到佇列a中的元素留下乙個,然後佇列a出佇列,再把佇列b中元素出佇列依次放入佇列a中

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

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...