引言:实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。
1.分析
可先将其理解为一个数组好理解些
如图,某数组的长度为8,当入队列时就把值放在tail处并让tail++;当出队列就让head++;数组的有效长度为[head,tail);现在不同的就是当tail到数组长度时,就可以让其又指向数组第一个元素处,如:
当head==tail时会有两种特殊情况:一种队列为空,一种为满,具体看代码理解
public class Test {
private int[] array = new int[100];
//[head,tail)
private int head = 0;
private int tail = 0;
private int size= 0;
//入环
public void offer(int val){
//元素满了,无法继续插入
if (size==array.length){
return;
}
array[tail]=val;
tail++;
if (tail>=array.length){
tail=0;
}
size++;
}
//出环
public Integer poll(){
if (array.length==0){
return null;
}
Integer temp = array[head];
head++;
if (head>=array.length){
head=0;
}
size--;
return temp;
}
//取头
public Integer peek(){
if (size == 0 ){
return null;
}
return array[head];
}
}