介绍
- 队列是先进先出
- 用双指针:实现队列取号功能
代码演示
package com.rjx.circularQueue;
public class CirQueue {
private int maxSize; // 队列的最大容量
private int front; // 队列头部指针,指向队列的第一个元素
private int rear; // 队列尾部指针,指向队列的最后一个元素的下一个位置
private int[] arr; // 用于存储队列元素的数组
// 构造方法,初始化循环队列
public CirQueue(int maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
front = 0; // 队列初始时,头部指针指向0
rear = 0; // 队列初始时,尾部指针也指向0
}
//判断队列是否满
public boolean isFull(){
return (rear + 1)%maxSize == front;
}
//判断队列是否为空
public boolean isEmpty(){
return front == rear;
}
//得到队列数据个数
public int getSize(){
return (rear + maxSize -front)%maxSize;
}
//添加队列信息
public void addQueue(int n){
//判断队列是否满
if (isFull()){
throw new RuntimeException("队列满,无法添加");
}
arr[rear] = n;
rear = (rear + 1)%maxSize;
}
//取出队列第一个
public int getQueue(){
//判断是否为空
if (isEmpty()){
throw new RuntimeException("队列为空,无法取出");
}
int value = arr[front];
front = (front + 1) % maxSize;
return value;
}
//展示队列信息
public void showQueue(){
//判断是否为空
if (isEmpty()){
throw new RuntimeException("队列为空");
}
for (int i = front; i < front + getSize(); i++) {
System.out.printf("arr[%d]=%d\n",i % maxSize,arr[i % maxSize]);
}
}
}
注:
- 队列满的条件:(rear + 1)%maxSize == front
- 队列空的条件: 队列空的条件
- 队列的数据个数:(rear + maxSize -front)%maxSize