1. 程式人生 > >兩個棧實現隊的思考

兩個棧實現隊的思考

     近期一個思考題。  兩個棧,如何實現隊。

首先我們瞭解隊和棧的結構特點:

棧(stack)  :後進先出;

隊(queue) :先進先出;

     

       舉個栗子:三叔的盜洞。沒挖通的時候就是棧,出口只有一個,就是進來時候的那個。在洞裡的人要出去只能後進的先出。盜洞挖通了就是隊。進去找寶貝要先進人先出,排隊進;(雖然不是很嚴謹)

        我們要達到的目的  (實現隊)                          入順序:①>②>③>④>⑤    出順序:①>②>③>④>⑤            

        那麼我們把資料壓入第一個棧 ,                       入順序:①>②>③>④>⑤    出順序:⑤>④>③>②>①         然後再把第一個棧的資料取出壓入第二個棧      入順序:⑤>④>③>②>①    出順序:①>②>③>④>⑤

已經滿足一開始的要求,使用兩個棧實現一個隊。並且可以在資料的兩段任意一端取資料(放在棧1和棧2的區別)。

這時候⑥來了,它也要加入到這個用棧實現的隊中。

那麼需要將第二個棧的資料全部彈出。壓回第一個棧。這時將⑥壓入棧中。再次壓入第二個棧中。 

這樣做的每有一個數據要加入隊中,隊中已有資料要多次移動才能滿足。

不論是頭部取資料,還是尾部取資料,或是增加刪除資料。都必須將資料在兩個棧中倒來倒去。有沒有什麼更好的方法呢?