佇列和環形佇列的實現

2021-10-06 23:44:56 字數 2725 閱讀 2169

1、基本介紹

2、陣列模擬佇列

public

class

arrayqueuedemo

catch

(exception e)

break

;case

'h':

trycatch

(exception e)

break

;case

'e':

scanner.

close()

; flag =

false

;break

;default

:break;}

}}}//使用陣列模擬佇列 --編寫乙個arrayqueue類

class

arrayqueue

//判斷佇列是否已滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//新增資料到佇列

public

void

addqueue

(int n)

rear++

; arr[rear]

= n;

}//從佇列中獲取資料,出佇列

public

intgetqueue()

front++

;return arr[front];}

//顯示所有的資料

public

void

showqueue()

for(

int i =

0; i < arr.length; i++)}

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

public

intheadqueue()

return arr[front+1];}}

存在問題:當front和rear都指向佇列尾部時,雖然隊列為空,但是也不能插入資料了

解決:將這個陣列使用演算法改造成環形佇列

思路:front 變數的含義做乙個調整: front 就指向佇列的第乙個元素, 也就是說 arr[front] 就是佇列的第乙個元素

front 的初始值 = 0

rear 變數的含義做乙個調整:rear 指向佇列的最後乙個元素的後乙個位置. 因為希望預留空出乙個空間做為約定(預留的空間始終在最後乙個元素的後乙個位置).

rear 的初始值 = 0

當佇列滿時,條件是(rear + 1) % maxsize == front【滿】

對隊列為空的條件,rear == front

當我們這樣分析, 佇列中有效的資料的個數(rear + maxsize - front) % maxsize

//判斷佇列是否已滿

public

boolean

isfull()

//判斷佇列是否為空

public

boolean

isempty()

//新增資料到佇列

public

void

addqueue

(int n)

arr[rear]

= n;

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

rear =

(rear +1)

% maxsize;

}//從佇列中獲取資料,出佇列

public

intgetqueue()

int value = arr[front]

;//front 後移 考慮取模

front =

(front +1)

% maxsize;

return value;

}//顯示所有的資料

public

void

showqueue()

for(

int i = front; i < front +

size()

; i++)}

//獲取當前佇列有效元素個數

public

intsize()

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

public

intheadqueue()

return arr[front];}

}

C 環形佇列實現

總體思想就是不讓rear和front的值超過maxn的大小。於是就在rear和front自增時候模maxn。注意!空隊時rear等於front,滿隊時必須空乙個位置。但是size就是size,說存3個就是存3個 include using namespace std template typenam...

golang環形佇列實現

table of contents 什麼是環形佇列 實現環形佇列圖示過程 golang版 實現過程 參考全部 在乙個指定大小的陣列裡迴圈寫入資料,借用二個指標分別實現入隊標記與出隊標記.也體現了指標的大好用處,請深入體會.大有裨益.如圖所示,乙個環形佇列.含有二個指標 佇列頭指標,佇列尾指標.初始化...

環形佇列的實現原理

環形佇列是乙個首尾相連的fifo 命名管道 的資料結構,它採用陣列的線性空間。它能很快知道佇列是否為滿或者為空,也能很快的訪問資料。原理 記憶體上沒有環形結構,因此環形佇列利用陣列的線性空間來實現。當資料到了尾部時,它將轉回到0位置來處理。這個轉回操作通過取模來執行。構造 邏輯上,將陣列q 0 與q...