public class QueueTest {
public static void main(String[] args) {
CircleQueue circleQueue = new CircleQueue(3);
circleQueue.add(10);
circleQueue.add(20);
circleQueue.add(30);
circleQueue.list();
circleQueue.pop();
circleQueue.add(40);
circleQueue.list();
circleQueue.pop();
circleQueue.add(50);
circleQueue.add(60);
circleQueue.list();
System.out.println(circleQueue.size());
}
}
class CircleQueue{
int maxSize ;
int front;
int rear;
int[] arr;
//初始化
public CircleQueue(int size) {
maxSize = size+1;
arr = new int[maxSize];
}
//判斷是否已滿
public boolean isFull(){
return (rear+1)%maxSize == front;
}
//判斷是否爲空
public boolean isEmpty(){
return rear ==front;
}
//入隊
public void add(int value){
if(isFull()){
System.out.println("已滿");
return;
}
arr[rear]= value;
rear =(rear+1)%maxSize;
}
//出隊
public int pop(){
if(isEmpty()){
throw new RuntimeException("空的");
}
int value = arr[front];
front = (front+1)%maxSize;
return value;
}
//大小
public int size(){
return (rear+maxSize-front)%maxSize;
}
//列出數組列表
public void list(){
for(int i = front;i<front+size();i++){
System.out.printf("[%d]=%d",i%maxSize,arr[i%maxSize]);
}
System.out.println();
}
}
以上實現在初始化數組大小的時候,在實際大小基礎上多加了1,原因是爲了多出一個循環空間,否則隊大小還沒滿,確判斷已經滿了。