介绍
线性队列而言,删除和插入只能分别在前端(front)和后端(rear)执行。
上图中显示的队列已完全填满,由于条件rear == max - 1变为真,因此无法再插入任何元素。但是,如果删除队列前端的2个元素,仍然无法插入任何元素,因为条件rear = max -1仍然成立。
这是线性队列的主要问题,虽然在数组中有空间可用,但是不能在队列中插入任何更多的元素。这只是内存浪费,需要克服这个问题。
这个问题的解决方案之一是循环队列。在循环队列中,第一个索引紧跟在最后一个索引之后。 可以考虑循环队列,如下图所示。
当front = -1和rear = max-1时,循环队列将满。循环队列的实现类似于线性队列的实现。只有在插入和删除的情况下实现的逻辑部分与线性队列中的逻辑部分不同。
原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/data_structure/circular-queue.html
时间复杂性
实现
入队
出队
判断队列已满/已空
1.
2.
3.
常见出题方法
Orz