一、简介
1.1 概念
队列简称队
–他同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;
在队列中把插入数据元素的一端称为队尾,删除数据元素的一端称为队头;
向队尾插入元素称为进队和入队,新元素入队后成为新的队尾元素;从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队头元素;
由于队列的插入和删除操作分别在队尾和队头进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先离队,所以称队列为先进先出表
。
循环队列:
将数组的最后一个元素的下一个元素从逻辑上认为是数组的第一个元素,这样就形成了逻辑上的环 。
1.2 结构图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/49bbcd82d64773cb622786f1bc4e4647.png)
二、简单实现
public class CircleSequenceQueue {
static final int defaultSize = 10;
int front;
int rear;
int count;
int maxSize;
Object[] queue;
public CircleSequenceQueue() {
init(defaultSize);
}
public CircleSequenceQueue(int size) {
init(size);
}
public void init(int size) {
maxSize = size;
front = rear = 0;
count = 0;
queue = new Object[size];
}
public void append(Object obj) throws Exception {
if (count > 0 && front == rear) {
throw new Exception("队列已满!");
}
queue[rear] = obj;
rear = (rear + 1) % maxSize;
count++;
}
public Object delete() throws Exception {
if (isEmpty()) {
throw new Exception("队列为空!");
}
Object obj = queue[front];
front = (front + 1) % maxSize;
count--;
return obj;
}
public Object getFront() throws Exception {
if (!isEmpty()) {
return queue[front];
} else {
return null;
}
}
public boolean isEmpty() {
return count == 0;
}
}