1. 程式人生 > >39 _ 隊列5 _ 循環隊列需要幾個參數來確定 及其含義的講解.swf

39 _ 隊列5 _ 循環隊列需要幾個參數來確定 及其含義的講解.swf

關系 執行 第一個 是否 alt 循環 規律 及其 比較

上面講解都是循環隊列,如果是鏈表實現的話就很簡單,隊列只有循環隊列才比較復雜

技術分享

技術分享

技術分享

技術分享

此時隊列中只存儲一個有效元素3,當在刪除一個元素的時候,隊列為空,pFont向上移動,pFont等於pRear,但是此時pFont的值不為null

1、下面分析下如何向隊列中添加元素

我們添加元素的時候只有在pRear的地方添加,pRear向上移動

技術分享

上面這種情況,pRear已經指向了數組的最尾部分,此時添加數據的時候,pRear不能繼續向上加1,執行6的位置,這個時候會出現內存溢出,pRear要執行到數組的0位置第一個元素節點,存儲的數據放在5個位置

技術分享

數組的長度是6,(5+1)% 6就是0,就指向了數組的第一個元素的地址

3、循環隊列的刪除元素的偽算法講解

刪除輸出的是pFont向上移動

技術分享

現在f執行4這個位置,隊列中只有一個數值c,pRear指向的節點規定是不存儲有效的數據的,pRear始終指向隊列有效數據的最後一個節點的下一個節點。

技術分享

此時pFont向上移動,pFont等於pRear,隊列中數據為空了

下面這種情況:

技術分享

pFont指向數值的尾部,隊列中還有兩個數值國和n,現在要刪除數據,pFont不能向上移動了,而應該移動到第一個元素0的位置將國刪除,所以pFont的移動要滿足下面的算法

技術分享

5、如何判斷循環隊列是否為空

技術分享

7、如何判斷隊列已經存儲滿

技術分享

上面中隊列中存儲q r s m四個元素

pFont和pRear的有沒有任何關系了,我們來分析下

技術分享

當我們初始化一個隊列的時候pFont和pRear都指向0這個位置,當向該隊列中添加一個元素的時候,把元素的值存儲在當前pRear指向的位置,然後pRear向上移動一個單位

技術分享

當繼續添加的數據的時候,pRear不斷向上移動

技術分享

上面隊列中存儲了 m n p q r s的值,這個時候pRear的值是大於pFont,也存在下面的情況

技術分享

pFont的值大於PRear,二者是沒有任何規律的

技術分享

當上面這種情況的時候,上面的隊列已經存儲滿了數組的長度是6 裏面存儲了 m n p q r數據,pRear執行的節點的數據是無效的,pRear定位為執行隊列中最後有效數據節點的下一個節點。

如果你這樣設置,你還想在5位置的地方存儲s,這個時候

技術分享

pRear和pFont又相等了,前面我們約定過pRear和pFont相等的時候,數組是null的,現在數組滿的時候二者又相等,所以二者矛盾了

技術分享

上面這種情況也代碼隊列已經滿了

技術分享

技術分享

所謂的少用一個元素指的就是pRear指向的節點的數據的值是無效的,Prear指向的是隊列中有效數據最後一個節點的下一個節點

39 _ 隊列5 _ 循環隊列需要幾個參數來確定 及其含義的講解.swf