39 _ 隊列5 _ 循環隊列需要幾個參數來確定 及其含義的講解.swf
上面講解都是循環隊列,如果是鏈表實現的話就很簡單,隊列只有循環隊列才比較復雜
此時隊列中只存儲一個有效元素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