front和rear的初始值都是-1
從隊尾插入乙個資料rear+1
從隊頭取出乙個資料front+1
隊滿 rear == maxszie-1
隊空 front == rear
//使用陣列模擬佇列,編寫乙個arrayqueue類
class
arrayqueue
//判斷佇列是否滿
public
boolean
isfull()
//判斷佇列是否為空
public
boolean
isempty()
//新增資料到佇列,入佇列
public
void
addqueue
(int n)
rear++
;//讓rear後移,說明新增了乙個資料
arr[rear]
= n;
}//獲取佇列的資料,出佇列
public
intgetqueue()
front++
;//front後移
return arr[front];}
//顯示佇列的所有資料
public
void
showqueue()
for(
int i =
0; i < arr.length; i++)}
//顯示佇列的頭資料,注意不是取出資料
public
intheadqueue()
return arr[front+1];}}
scanner scanner = new scanner(system.in)
可以實現鍵盤輸入
scanner.next().charat(0);
接收乙個字元
int value = scanner.nextint();
獲取輸入的數字
scanner.close();
關閉scan
public
class
arrayqueuedemo
catch
(exception e)
break
;case
'h':
//檢視佇列頭的資料
trycatch
(exception e)
break
;case
'e':
//退出
scanner.
close()
; loop =
false
;break
;default
:break;}
} system.out.
println
("程式退出");
1. 但是這種佇列有乙個缺點,無法迴圈使用,當我把佇列裡面的資料全部取出來之後,無法再次插入
2. 因為我們對陣列是否裝滿的判斷是rear等於maxszie-1
3. 所以我們為了解決這種問題,需要使用到環形佇列
front和rear的初始值都是0
隊滿 (rear+1)%maxsize==front
隊空 front == rear
加入乙個數
//直接將資料加入
arr[rear]
= n;
//將rear後移,這裡必須考慮取模,這個就是模擬環形佇列的主要思想
rear =
(rear+1)
%maxsize;
取出乙個數
int value = arr[front]
;
front =
(front+1)
%maxsize;
return value;
遍歷一遍所有的資料
//顯示佇列的所有資料
public
void
showqueue()
// 思路:從front開始遍歷,遍歷多少個元素
//for
(int i = front; i < front +
size()
; i++)}
//求出當前佇列的有效資料的個數
public
intsize()
舉個例子:
例子2:
這個時候我連續插入3個資料,並取出乙個資料,那麼rear現在等於0 ,front現在等於1
那麼如果是普通佇列,就無法再插入資料了,因為我的rear 已經大於 maxsize-1 了
但是我使用了環形佇列,我現在再次插入乙個資料5
那麼arr[0] == 5 ,rear = [0+1] % 3 =1
這就模擬了環形佇列
當我再次取出2個資料,那麼front 也等於0了,這裡也實現了迴圈
//使用陣列模擬迴圈佇列,編寫乙個arrayqueue類
class
arrayqueue2
//判斷佇列是否滿
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];}
}
public
class
arrayqueuedemo2
catch
(exception e)
break
;case
'h':
//檢視佇列頭的資料
trycatch
(exception e)
break
;case
'e':
//退出
scanner.
close()
; loop =
false
;break
;default
:break;}
} system.out.
println
("程式退出");
}}
陣列模擬佇列 以及佇列的復用(環形佇列)
private int front 指向佇列頭的第乙個元素 privat int maxszie 設定佇列的最大長度 private int rear 指向佇列尾的最後乙個元素的後乙個位置,留出乙個位置作為約定 因為需要留出乙個位置作為約定,那麼當陣列的maxsize 4 的時候有效資料的個數就等於...
陣列模擬環形佇列
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...