關於迴圈佇列的一些講解
前面講到了佇列的“假溢位”,解決假溢位的辦法就是後面滿了,就再從頭開始,也就是頭尾相接的迴圈。我們把佇列的這種頭尾相接的順序儲存結構稱為迴圈佇列。
比如昨天的例子,rear可以改為指向下標為0的位置,這樣就不會造成指標指向不明的問題了。
但是如果繼續進行入隊操作的話,比如繼續插入a6、a7,則rear指標就與front指標重合,同時指向下標為2的位置。
我們來討論第二種方法,由於rear可能比front大,也可能比front小,所以儘管它們只相差一個位置時就是滿的情況,但也可能是相差整整一圈。所以若佇列的最大尺寸為QueueSize,那麼佇列滿的條件是(rear+1) %QueueSize == front (取模“%的目的就是為了整合rear與front大小為一個問題)。
比如上面這個例子, QueueSize = 5,當 front=0,而 rear=4, (4+1) %5 = 0,所以此時佇列滿。再比如,front = 2而rear =1。(1 + 1) %5 = 2,所以此時 佇列也是滿的。而對於下圖, front = 2而rear= 0, (0+1) %5 = 1,1!=2,所以此時佇列並沒有滿。
另外,當rear > front時,此時佇列的長度為rear—front。但當rear < front時,佇列長度分為兩段,一段是QueueSize-front,另一段是0 + rear,加在一起,佇列長度為rear-front + QueueSize,因此通用的計算佇列長度公式為:
(rear—front + QueueSize) % QueueSize
有了這些講解,現在實現迴圈佇列的程式碼就不難了。具體的例子程式可以參照前面說的順序佇列。
轉載自:
延伸閱讀
此文章所在專題列表如下: