迴圈佇列隊滿和隊空判定

2021-08-20 19:52:53 字數 1447 閱讀 3518

假設迴圈佇列的隊尾指標是rear,隊頭是front,其中queuesize為迴圈佇列的最大長度。

(1) 入隊時隊尾指標前進1:(rear+1)%queuesize

(2) 出隊時隊頭指標前進1:(front+1)%queuesize

例1, 例2

(3) 佇列長度:(rear-front+queuesize)%queuesize

例3:

現有一迴圈佇列,其隊頭指標為front,隊尾指標為rear;迴圈佇列長度為n。其隊內有效長度為?(假設隊頭不存放資料)

答案:(rear-front+n)%n

(4) 隊空和隊滿的條件

為了區分隊空還是堆滿的情況,有多種處理方式:

方式1: 犧牲乙個單元來區分隊空和隊滿,入隊時少用乙個佇列單元,即約定以"隊頭指標在隊尾指標的下一位置作為隊滿的標誌"。

隊滿條件為:(rear+1)%queuesize==front

隊空條件為:front==rear

佇列長度為:(rear-front++queuesize)%queuesize

方式2: 增設表示佇列元素個數的資料成員size,此時,隊空和隊滿時都有front==rear。

隊滿條件為:size==queuesize

隊空條件為:size==0

方式3: 增設tag資料成員以區分隊滿還是隊空

tag表示0的情況下,若因刪除導致front==rear,則隊空;

tag等於1的情況,若因插入導致front==rear則隊滿

例1:

迴圈佇列的儲存空間為q(1:50),初始狀態為front=rear=50。

經過一系列正常的入隊與退隊操作後,front=rear=25。此後又插入乙個元素,則迴圈佇列中的元素個數為多少?

答案:1,或50且產生上溢錯誤

例2:

迴圈佇列的儲存空間為q(1:40),初始狀態為front=rear=40。

經過一系列正常的入隊與退隊操作後,front=rear=15,此後又退出乙個元素,則迴圈佇列中的元素個數為多少?

答案:39,或0且產生下溢錯誤

例3:

設迴圈佇列的儲存空間為q(1:35),初始狀態為front=rear=35。現經過一系列入隊與退隊運算後,front=15,rear=15,則迴圈佇列中的元素個數為多少?

答案:0或35

例4:

迴圈佇列的儲存空間為q(1:200),初始狀態為front=rear=200。經過一系列正常的入隊與退隊操作後,front=rear=1 則迴圈佇列中的元素個數為多少?

答案:0或200

例3:個人覺得這一題條件不全

最大容量為n的迴圈佇列,隊尾指標是rear,隊頭是front,則隊空的條件是:rear=front

迴圈佇列隊滿條件

隊頭指標在隊尾指標的下一位置時,隊滿。q.front q.rear 1 maxsize 因為隊頭指標可能又重新從0位置開始,而此時隊尾指標是maxsize 1,所以需要求餘。當隊頭和隊尾指標在同一位置時,隊空。q.front q.rear 1 include 2 include 3 define m...

迴圈佇列判斷滿與空

何時隊列為空?何時為滿?由於入隊時尾指標向前追趕頭指標,出隊時頭指標向前追趕尾指標,故隊空和隊滿時頭尾指標均相等。因此,我們無法通過front rear 來判斷佇列 空 還是 滿 注 先進入的為 頭 後進入的為 尾 解決此問題的方法至少有三種 其一是另設乙個布林變數以匹別佇列的空和滿 其二是少用乙個...

資料結構 考研 迴圈佇列處理隊滿和隊空的三種方式

順序儲存的佇列在隊滿時再進隊出現的溢位往往是假溢位,即還有空間但用不上,為了有效利用佇列空間,可將佇列元素存放陣列首尾相接,形成迴圈佇列。但是構造迴圈佇列時不得不考慮到的問題就是如果不加以限制,隊空和隊滿的情況是相同的。即隊頭指標和隊尾指標的指向相同。一般來說有以下三種解決方式 犧牲乙個單元來區分隊...