循环队列如何判断队列已满或者空?
使用一个length变量记录实际元素个数,就不用每次去计算head指针和rear指针之间的关系来判断队列的状态。
package demo;
import java.util.Arrays;
@SuppressWarnings("unchecked")
public class CircleArrayQueue<T> {
public int head = 0;//头指针
public int rear = 0;//尾指针
private Object[] data;//存放数据
private int maxSize;//队列长度
private int length = 0;//实际元素个数
//默认初始化
public CircleArrayQueue(){
data = new Object[10];
maxSize = 10;
}
//自定义初始化
public CircleArrayQueue(int initSize){
if(initSize <= 0){
throw new RuntimeException("初始化长度必须大于0");
}
data = new Object[initSize];
maxSize = initSize;
}
//判断循环队列是否已满
public boolean isFull(){
return length == maxSize;
}
//判断是否为空
public boolean isEmpty(){
return length == 0;
}
//入队
public void add(T t){
if(isFull()){
throw new RuntimeException("队列已满,无法入队!");
}else{
data[rear%maxSize] = t;
length++;
}
}
//出队
public T get(){
if(isEmpty()){
throw new RuntimeException("队列为空,没有元素");
}
length--;
return (T)data[++head%maxSize];
}
//查看队首元素
public T peek(){
if(isEmpty()){
throw new RuntimeException("队列为空,没有元素");
}
return (T)data[(head+1)%maxSize];
}
}