天天看點

資料結構--隊列

隊列隻允許一端進行插入操作,另一端進行删除操作。隊列是一種先進先出的線性表,簡稱fifo,允許插入的一段為隊尾,允許删除的一端為隊頭。

資料結構--隊列

與棧不同的是,隊列的出隊元素在隊頭,那麼隊列沒出去一個元素,後面的元素就要依次像前移動,這樣他的時間複雜度就是o(n)。

資料結構--隊列

考慮上面截圖的流程感覺效率很低,起始我們的隊列可以以另一種方式來處理,就是元素不懂,而隊頭的指針移動,這樣它的時間複雜度就為o(1)。

資料結構--隊列

上面解決了效率低的問題,但是會存在控件浪費的現象,之前已經出隊的元素,控件還在那,下面我們引入循環隊列的概念,解決這個問題。

我們把隊列頭尾相接的這樣的存儲結構稱之為循環隊列。

資料結構--隊列

rear:隊尾所指向的隊列位置。

font:隊頭所指向的隊列位置。

queuesize:隊列最大長度。

判斷隊列是否滿:(rear + 1) % queuesize == font。

計算隊列長度:(rear - font  + queuesize ) % queuesize

隊列的鍊式存儲結構與單連結清單的鍊式存儲結構一緻,隻不過是元素尾進頭出,我們稱之為鍊隊列。

資料結構--隊列
資料結構--隊列

入隊操作,将an的後繼節點改為e的位址,然後尾節點指向e。

資料結構--隊列

出隊操作,

資料結構--隊列

兩個隊列的選擇,看具體的需求,與之前總結棧的差別一緻,如果元素的大小确定則使用順序隊列最好,如果元素的大小不确定則使用連隊列最好。

繼續閱讀