目录
1.为什么使用循环队列
2. 循环队列组成
为什么要只使用size-1 个空间存储?
3.循环队列的元素进出
3.1 队尾加入元素
3.2 队头删除元素
3.3 取出队头元素
3.4 取出队尾元素
1.为什么使用循环队列
“假溢出”——》 出队列会空出存储空间,无法再次利用
如图: 索引为0和1的空间被浪费
2. 循环队列组成
有界顺序队列+索引值反复利用
front :一个“头指针”,其实就是个索引值,代表队头的位置
rear: 一个“为指针” ,其实就是个索引值,代表(队尾+1)的位置
max_size: 整个队列的最大容量 -》“有界”
为什么要只使用size-1 个空间存储?
区分队空和队满
队满 isFull() 只需 (rear+1)%max_size == front
队空 isEmpty() 只需 rear == front
3.循环队列的元素进出
3.1 队尾加入元素
先判断队列非满,再更新rear索引
public boolean enQueue(int value) {
if (isFull()) {
return false;
}
data[rear] = value;
rear = (rear + 1) % size;
return true;
}
3.2 队头删除元素
先判断队列非空,再更新front索引
public boolean deQueue() {
if (isEmpty()) {
return false;
}
front = (front + 1) % size;
return true;
}
3.3 取出队头元素
先判断非空,再通过front直接找到
public int Front() {
if (isEmpty()) {
return -1;
}
return data[front];
}
3.4 取出队尾元素
先判断非空,再通过(rear-1+max_size)%size 找到
public int Rear() {
if (isEmpty()) {
return -1;
}
return data[(rear - 1 + size) % size];
}