兩個棧實現隊的思考
阿新 • • 發佈:2018-12-12
近期一個思考題。 兩個棧,如何實現隊。
首先我們瞭解隊和棧的結構特點:
棧(stack) :後進先出;
隊(queue) :先進先出;
舉個栗子:三叔的盜洞。沒挖通的時候就是棧,出口只有一個,就是進來時候的那個。在洞裡的人要出去只能後進的先出。盜洞挖通了就是隊。進去找寶貝要先進人先出,排隊進;(雖然不是很嚴謹)
我們要達到的目的 (實現隊) 入順序:①>②>③>④>⑤ 出順序:①>②>③>④>⑤
那麼我們把資料壓入第一個棧 , 入順序:①>②>③>④>⑤ 出順序:⑤>④>③>②>① 然後再把第一個棧的資料取出壓入第二個棧 入順序:⑤>④>③>②>① 出順序:①>②>③>④>⑤
已經滿足一開始的要求,使用兩個棧實現一個隊。並且可以在資料的兩段任意一端取資料(放在棧1和棧2的區別)。
這時候⑥來了,它也要加入到這個用棧實現的隊中。
那麼需要將第二個棧的資料全部彈出。壓回第一個棧。這時將⑥壓入棧中。再次壓入第二個棧中。
這樣做的每有一個數據要加入隊中,隊中已有資料要多次移動才能滿足。
不論是頭部取資料,還是尾部取資料,或是增加刪除資料。都必須將資料在兩個棧中倒來倒去。有沒有什麼更好的方法呢?