1. 程式人生 > >【堆疊】兩個棧模擬佇列

【堆疊】兩個棧模擬佇列

之前想的太複雜了,過分地考慮空間的利用率,使得邏輯非常複雜,簡直要爆炸,看了標準答案後,媽的如此簡單!!

答案思路:準備兩個棧A,B。A專門用於入隊,B專門用於出隊。

當要入隊時,如果A沒有滿,那麼很正常地把元素壓入A。如果A已經滿了,如果B是空的,我們就把A的元素全部壓入B,這樣先入棧的元素跑到了B的頂端,而最後入A的到了B的棧底,剛好很適合出隊。但是如果B非空,則入隊失敗。因為B用於出隊的,把A的元素壓入B,會導致出隊混亂(後進的元素居然先出了)。

當要出隊時,B不滿的時候,就從B出。如果B空了,就檢視A的情況,如果A空,棧本來就是空的好嗎!如果A非空,因為此時B是空的,所以把A的棧倒入B中,此時先進入A的元素到了B的頂端,剛好可以進行出隊。