兩個棧實現佇列

2022-09-15 20:39:15 字數 686 閱讀 3511

棧的特性是先進後出(filo),佇列的特性是先進先出(fifo)。

解題思路:

用乙個棧(棧a)來模擬入隊,另乙個棧(棧b)來模擬出隊過程。

入隊過程:直接把元素壓入棧a中。

出隊過程:當棧b為空時,講棧a中的元素出棧並以此壓入棧b中,然後依次出棧。

假設現有三個元素:3,4,5,用兩個棧來模擬佇列。

剛開始,將3,4壓入棧a中(入佇列),此時的情況為:棧a:,棧b:。

然後馬上將棧a的元素壓入棧b中,此時的情況變為:棧a:,棧b:。

還有最後乙個元素5,將它壓入棧a中(入佇列),此時的情況為:棧a:,棧b:。

此題的關鍵在於,當棧b為空時才可將棧a的元素壓入。

此時正確的操作應為:棧b的3,4出棧(出佇列),等棧空了以後,5再由棧a入棧b,最後5出棧b(出佇列)。

而如果5在棧b彈出元素3後就壓入棧b,此時4還在棧b中,5進來後4就被「壓在下面」了,最終棧b的彈出順序變成:3,5,4。所以,棧b為空時才可壓入棧a裡的元素。

j**a**:

public class solution 

public int pop()

}return stack2.pop();

}}

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

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