队列
队列可以用数组或链表实现,遵循**先进先出(FIFO)**的原则。
队列的常用操作
- enQueue():将数据存入队列
- deQueue():将数据弹出队列
环形队列的实现
如果使用一般数组实现队列,频繁的enQueue与deQueue就需要很大的空间,如果使用环形队列,可以节省空间。
实现思路:
- 定义一个数组,长度为maxSize+1,队列最多存储maxSize的空间,多出的一个作为标记
- rear指向数组顶部+1,front指向尾部数据
- 如果数组已满,那么 front==(rear+1)%maxSize
- 如果数组为空,那么rear==front;
代码实现:
public class Queue {
private int[] queue;
private int maxSize;
private int front;
private int rear;
public Queue(int maxSize){
this.maxSize=maxSize;
this.queue=new int[maxSize+1];
this.front=0;
this.rear=0;
}
public boolean isEmpty(){
return rear==front;
}
public boolean isFull(){
return front==(rear+1)%(maxSize+1);
}
public boolean enQueue(int value){
if(isFull()) return false;
queue[rear]=value;
rear=(rear+1)%(maxSize+1);
return true;
}
public Integer deQueue(){
if(isEmpty()) return null;
int value=queue[front];
front=(front+1)%(maxSize+1);
return value;
}
}