數據結構為
class CircleArray{
private int front;
private int rear;
private int maxSize;
private int[] arrays;
public CircleArray(int maxSize) {
this.maxSize = maxSize; //隊列的長度,比實際隊列應用空間大1
arrays = new int[maxSize];
front = 0; //指向隊列第一個元素
rear = 0; //指向隊列最后一個元素的后一個位置,因此需要隊列預留一個空間,所以呢數組最大空間要比實際應用大
}
}
判斷隊列是否已經滿了
public boolean isFull() {
//這里是判斷rear是否在預留位置上。也可以用(front-1+maxSize)%maxSize==rear進行判斷,
//預留位置可以理解為(front+隊列實際空間)%maxSize的后一個位置,上面的(-1+maxSize)為隊列實際空間
return (rear+1)%maxSize ==front;
}
判斷隊列是否為空
public boolean isEmpty() {
return rear==front;
}
向隊列添加數據
public void addQueue(int n) {
if(isFull()) {
System.out.println("隊列已近滿了,不能加入數據");
return;
}
arrays[rear] = n;
rear = (rear+1)%maxSize;
}
從隊列取出數據
public int getQueue() {
if(isEmpty()) {
throw new RuntimeException("隊列為空,不能取出數據");
}
int result = arrays[front];
front = (front+1)%maxSize;
return result;
}
隊列里面數據個數public int size() {
//這里可以這么理解
//當rear>front的時候 其實rear-front就是隊列里面的數據個數
//當rear<front的時候,rear+(maxSize-front)就是隊列里面的數據個數 return (rear-front+maxSize)%maxSize; }
顯示隊列
public void show() {
if(isEmpty()) {
System.out.println("隊列為空。。。。");
return ;
}
int size = size();
for(int i=front;i<front+size;i++) {
System.out.printf("a[%d] = %d\n",i%maxSize,arrays[i%maxSize]);
}
}
