数组实现环形队列
数据结构为
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]);
}
}

浙公网安备 33010602011771号