陣列模擬佇列 以及佇列的復用(環形佇列)

2021-10-09 08:28:59 字數 2368 閱讀 2521

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...