环形队列实现思路:
1.头指针front和尾指针rear都指向0。
2.环形队列判断是否满的条件:(rear+1)%maxSize==front
在数组的最后一个位置之前,尾指针rear的下一个位置可以用rear+1表示,但是当rear指向数组最后一个位置时 rear的下一个位置是0,所以实际上环形队列中rear的下一个位置是(rear+1)%maxSize,所以判断环形队列为满的条件是(rear+1)%maxSize == front
3.头指针和尾指针的下一个位置为(front+1)%maxSize,(rear+1)%maxSize。
4.环形队列是否为空的条件:rear == front
下面是代码实现:
class CircleArray{
private int maxSize;
private int front;
private int rear;
private int arr[];
//初始化环形队列
CircleArray(int maxSize){
this.maxSize=maxSize;
arr =new int[maxSize];
//环形队列的头指针和尾指针都指向0
front=0;
rear=0;
}
public boolean isEmpty(){
//判断环形队列是否为空
return rear==front;
}
public boolean isFull(){
//判断环形队列是否满
//(rear+1)%maxSize为rear的下一个位置所以当(rear+1)%maxSize==front为满
return (rear+1)%maxSize==front;
}
public void add(int arr1){
if (isFull()){
System.out.println("队列已满");
}else {
//将数据加入队列
arr[rear]=arr1;
//当rear+1!=maxSize时(rear+1)%maxSize和rear++效果相同
//当rear+1==maxSize时取余为0 rear回到0位置
rear=(rear+1)%maxSize;
}
}
public int pop(){
if (isEmpty()){
System.out.println("队列为空");
return 0;
}else {
int arr1=arr[front];
//当front+1!=maxSize时(front+1)%maxSize和front++效果相同
//当front+1=maxSize时取余为0 front回到0位置
front=(front+1)%maxSize;
return arr1;
}
}
菜鸟一个,有什么问题请留言咨询