資料結構四 迴圈佇列

2021-10-09 05:17:21 字數 2252 閱讀 8120

1.在之前的佇列中,因為是通過rear==maxsize-1判斷佇列是否滿了,而如果出隊後,front依次往後移動,這就會導致front前面的空間白白浪費掉,整個陣列空間其實並沒有滿,所以這裡就有了迴圈佇列

2.迴圈佇列這裡設定front為第乙個元素,而rear為最後乙個元素的下乙個元素,同時規定迴圈佇列最多只能有maxsize-1個佇列元素,當迴圈佇列中只剩下乙個空儲存單元時,佇列就已經滿了,也就是說定義了陣列a[4],在第一波入隊中,只有a[0],a[1],a[2]才能使用,a[3]則不能使用

之所以這樣設定,是因為入隊時,rear+1,尾指標追趕頭指標,而出隊時則是front+1,頭指標追趕頭指標,如果front就指向第乙個元素,rear指向最後乙個元素,當兩者相等時,你根本無法判斷是front+1後到達了rear的位置,還是rear+1之後到達了front所在的位置,此時就無法判斷佇列到底為空,還是滿了,因此rear需要預留乙個空間。相當於把最後乙個位置看做是front所在的第乙個元素的位置

這裡當rear到達了front的上乙個位置時,此時(rear+1)%maxsize== front,也就是說

而當兩者位置相同時,rear==front,就必然是front到達了rear的位置(因為在此之前就會判定(rear+1)%maxsize= =front,所以不可能是rear到達了front的位置),此時隊列為空

3.有效資料個數為 (rear + maxsize - front) % maxsize

%maxsize,是因為當rear>front時,rear + maxsize - front必然maxsize,這時%maxsize就知道它們之間隔了幾個元素,而當rear**測試

public

class

test

catch

(exception e)

break

;case

'h':

// 檢視佇列頭的資料

trycatch

(exception e)

break

;case

'e':

// 退出

scanner.

close()

; loop =

false

;break

;default

:break;}

} system.out.

println

("程式退出~~");

}}class

circlearray

// 判斷佇列是否滿

public

boolean

isfull()

// 判斷佇列是否為空

public

boolean

isempty()

// 新增資料到佇列

public

void

addqueue

(int n)

//直接將資料加入

arr[rear]

= n;

//將 rear 後移, 這裡必須考慮取模

rear =

(rear +1)

% maxsize;

}// 獲取佇列的資料, 出佇列

public

intgetqueue()

// 這裡需要分析出 front 是指向佇列的第乙個元素

// 1. 先把 front 對應的值保留到乙個臨時變數

// 2. 將 front 後移, 考慮取模

// 3. 將臨時儲存的變數返回

int value = arr[front]

; front =

(front +1)

% maxsize;

return value;

}// 顯示佇列的所有資料

public

void

showqueue()

// 思路:從 front 開始遍歷,遍歷多少個元素

// 動腦筋

for(

int i = front; i < front +

size()

; i++)}

// 求出當前佇列有效資料的個數

public

intsize()

// 顯示佇列的頭資料, 注意不是取出資料

public

intheadqueue()

return arr[front];}

}

(四)資料結構之迴圈佇列

之前不採用stl實現雙端佇列時我記得我就是使用了迴圈佇列。其實這是不規範的 雖然說使用很靈活,但我覺得還是應該分開來,避免弄混 所以誤區就是,迴圈佇列是不允許彈出隊尾或新增隊首的,也就是說它是最傳統的佇列,嚴格符合 先進先出,後進後出 的特點!判斷佇列是否滿有兩種解決方法 少用乙個單元,規定頭 fr...

資料結構 佇列 迴圈佇列

在佇列的陣列實現中,我們很容易發現數在出隊後,陣列的前面部分會有剩餘空間沒有被使用,所以我們為了最大程度的利用固定長度的陣列,我們採用迴圈佇列的儲存方式,這種方式的最大問題在於resize的時候比較麻煩,所以我們不考慮resize的情況。基本結構如下,這裡front指向第乙個元素的位置,rear指向...

資料結構 佇列 迴圈佇列

資料結構 佇列 迴圈佇列 順序儲存 犧牲乙個空間單元來判段佇列滿狀態。q.front q.rear 1 initsize date 2017 4 16 include define elemtype char define initsize 100 typedef structsqqueue voi...