private int front;
指向佇列頭的第乙個元素
privat int maxszie;
設定佇列的最大長度
private int rear;
指向佇列尾的最後乙個元素的後乙個位置,留出乙個位置作為約定
因為需要留出乙個位置作為約定,那麼當陣列的maxsize == 4;
的時候有效資料的個數就等於3個
private int arr;
使用陣列來儲存資料,模擬環形佇列
那麼佇列就會形成乙個圓環形狀的 如下圖:
通過分析可以得出front == rear
的時候環形佇列是空的
當對列滿的時候就是(rear + 1) % maxsize == front;
佇列的有效資料個數(rear + maxsize - front) % maxsize;
佇列的有效資料個數就可以用來遍歷出整個環形佇列的有效值
遍歷從front
頭指標開始
通過開始判斷出來的思路,寫**實現
佇列的判空和判滿
/**
* 用來判斷環形佇列是否滿的狀態
** @return
*/public
boolean
isfull()
/** * 判斷佇列是否為空
** @return
*/public
boolean
isempty()
向環形佇列中新增乙個元素和取出元素/**
* 向佇列新增乙個元素
** @param number
*/public
void
addqueue
(int number)
arr[rear]
= number;
//將rear後移,向後移動指標的時候必須要考慮取模,不然就會造成陣列越界
rear =
(rear +1)
% maxsize;
}/**
* 從佇列中取出乙個元素
** @return
*/public
intgetqueue()
/** * front 指向佇列的第乙個元素
* 1、先吧front儲存在乙個臨時變數
* 2、將front後移,後移指標的時候一樣必須考慮取模,否則也會造成陣列越界
* 3、將臨時儲存的變數返回
*/int val = arr[front]
; front =
(front +1)
% maxsize;
return val;
}
顯示佇列的所有元素–難點
最重要的是需要計算出來陣列中有多少個有效數值
通過思路分析已經得初有效數值的個數(rear + maxsize - front) % maxsize;
這就是陣列的有效資料個數
並且陣列的第乙個元素是從front
開始,那麼就需要從front
開始遍歷
for
(int i = front ; i < front +
((rear + maxsize - front)
% maxsize)
; i++
)
具體的**實現為:
/**
* 顯示佇列所有元素
** @return
*/public
void
showqueue()
//思路:從front開始遍歷,遍歷多少個元素呢
for(
int i = front; i < front +
size()
; i++)}
/** * 求出當前佇列的有效資料的個數
** @return
*/public
intsize()
輸出佇列的第乙個元素
因為front
指向的就是佇列頭的第乙個元素,那麼arr[front]
就是第乙個元素
/**
* 取出佇列頭元素
** @return
*/public
intheadqueue()
return arr[front]
;}
gitee:環形佇列
github:環形佇列
2 陣列模擬佇列,以及環形佇列
front和rear的初始值都是 1 從隊尾插入乙個資料rear 1 從隊頭取出乙個資料front 1 隊滿 rear maxszie 1 隊空 front rear 使用陣列模擬佇列,編寫乙個arrayqueue類 class arrayqueue 判斷佇列是否滿 public boolean i...
陣列模擬環形佇列
class queue 判斷佇列是否滿 public boolean isfull 判斷佇列是否為空 public boolean isempty 新增資料 param n 新增資料的值 public void addqueue int n arr rear n 注意 這裡一定要 去摸 而且 注意 ...
陣列模擬環形佇列
package queue 陣列模擬環形佇列 public class queue public void add int element else public intremove throws exception int temp arr front front front 1 size ret...