环形队列就是将原本实现队列使用的数组或链表收尾相连,从而实现,在数组取出数据后头向后,空出位置可以继续存储数据
从队列中取出数据后 头向后 前面空出位置
简单实现
package com.test;
public class CircularQueue {
private int front;//队列头
private int rear;//队列尾
private int usedSize;//数据个数
private int[] elem;//数组
//创建指定长度的环形队列
public MyCircularQueue(int k){
this.elem=new int[k];
this.front=0;
this.rear=0;
this.usedSize=0;
}
public boolean enQueue(int value){
if(isFull()){
return false;
}
this.elem[this.rear]=value;
this.usedSize++;
this.rear=(this.rear+1)%this.elem.length;
return true;
}
//队尾下标加上1在%
public boolean isFull(){
if((this.rear+1)%this.elem.length==this.front){
return true;
}
return false;
}
public boolean isEmpty(){
return this.rear==this.front;
}
public boolean deQueue(int value){
if(isEmpty()){
return false;
}
this.elem[front]=value;
this.front=(this.front+1)%this.elem.length;
this.usedSize--;
return true;
}
public int Front(){
if(isEmpty()){
throw new UnsupportedOperationException("队列为空");
}
return this.elem[this.front];
}
public int Rear(){
if(isEmpty()){
throw new UnsupportedOperationException("队列为空");
}
int index=this.rear == 0 ? this.elem.length-1 : this.rear-1;
return this.elem[index];
}
}