一、循环队列的原理
循环队列底层其实就是一个数组,然后定义两个指针(实际上就是两个变量)用这两个变量的来指向数组的下标,然后根据一些数学的简单思想,即可使得对数组的一个循环,因为队列的特性就是先进先出,所以我们要对这个循环队列进行插入、删除等操作就需要知道队头和队尾,插入的话就在队尾插,删除就在队头删,所以一个变量为队头,一个变量为队尾
二、循环队列图解
三、循环队列的实现
我这里实现了一个特殊,就是当队列满的时候我对队列进行了一个扩容,正常循环队列,当队列满的时候再插入就会报错
import java.util.Arrays;
public class MyCycleQueue {
public int[] elem=new int[10];
public int rear;
public int front;
public void offer(int val){
if(isFull()){
elem=grow();
}
elem[rear]=val;
rear=(rear+1)%elem.length;
}
public int poll(){
if(isEmpty()){
return -1;
}
int pollNum=elem[front];
front=(front+1)%elem.length;
return pollNum;
}
public int peek(){
if(isEmpty()){
return -1;
}
return elem[front];
}
public boolean isEmpty(){
if(rear==front){
return true;
}
return false;
}
public boolean isFull( ){
if((rear+1)%elem.length==front){
return true;
}
return false;
}
public int[] grow(){
Arrays.copyOf(elem,elem.length*2);
return elem;
}
}