別的不多說直接上代碼:
class CircleArray{
private int maxSize; // 表示數組的最大容量
//front 變量的含義做一個調整: front 就指向隊列的第一個元素, 也就是說 arr[front] 就是隊列的第一個元素
//front 的初始值 = 0
private int front;
//rear 變量的含義做一個調整:rear 指向隊列的最后一個元素的后一個位置. 因為希望空出一個空間做為約定.
//rear 的初始值 = 0
private int rear; // 隊列尾
private int[] arr; // 該數據用於存放數據, 模擬隊列
public CircleArray(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
}
//判斷是否隊滿
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
//是否對空
public boolean isEmpty() {
return rear == front;
}
//添加數據到隊列
public void addQueue(int e) {
//判斷是否隊滿
if(isFull()) {
throw new RuntimeException("隊列滿,插入失敗..");
}
arr[rear] = e;
//將rear 后移
rear = (rear+1)%maxSize;
}
//出隊列
public int getQueue() {
if(isEmpty()) {
throw new RuntimeException("隊列空,操作失敗。。");
}
//front 指向隊列的第一個元素
int value = arr[front];
front = (front + 1 ) % maxSize;
return value;
}
//獲取有效的數據個數
public int size() {
return (rear + maxSize - front) % maxSize;
}
// 顯示隊列的所有數據
public void showQueue() {
// 遍歷
if (isEmpty()) {
System.out.println("隊列空的,沒有數據~~");
return;
}
// 思路:從front開始遍歷,遍歷多少個元素
// 動腦筋
for (int i = front; i < front + size() ; i++) {
System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
}
}
//顯示隊列的頭數據, 注意不是取出數據
public int getHeader() {
if(isEmpty()) {
throw new RuntimeException("隊列為空...");
}
return arr[front];
}
