//环形队列
@Data
public class RingQueue {
private int front; //队列头
private int rear; //队列尾巴
private int[] array;
private int maxSize; //数组最大容量
public RingQueue(int maxSize){
array = new int[maxSize];
setMaxSize(maxSize+1);
}
//添加
public void add(int number){
//满了
if(isFull()){
System.out.println("队列已经满了");
return;
}
System.out.println("添加数据: "+number);
array[rear] = number;
rear = (rear +1) % maxSize;
}
//获取
public void get(){
//判断是否为空
if(isNull()){
System.out.println("队列中没有数据了");
return;
}
System.out.println("获取数据: "+array[front]);
front = (front + 1) % maxSize;
}
//查看数据
public void view(){
if(isNull()){
System.out.println("暂时没有数据");
return;
}
int index =front;
System.out.println();
System.out.println("展示数据开始________________");
for (int i = 0; i < size() ; i++) {
System.out.println(i+": "+ array[index]);
index = (index +1) % maxSize;
}
System.out.println("展示数据结束________________");
System.out.println();
}
//获取当前队列中有效数据个数
public int size(){
return (rear + maxSize - front) % maxSize;
}
//判断队列是否已满
public boolean isFull(){
return (rear+1) % maxSize == front;
}
//判断队列是否为空
public boolean isNull(){
return rear == front;
}
}
- 测试 ```java {
RingQueue ringQueue = new RingQueue(3);
ringQueue.add(10);
ringQueue.add(20);
ringQueue.add(30);
ringQueue.add(40);
ringQueue.view();
ringQueue.get();
ringQueue.view();
} ```