1、基本介紹
2、陣列模擬佇列
存在問題:當front和rear都指向佇列尾部時,雖然隊列為空,但是也不能插入資料了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 變數的含義做乙個調整: 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...