队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的线性表,简称FIFO(First In First Out)。允许插入的一端称为队尾,允许删除的一端称为队头。
队列顺序存储结构的不足:入队操作时间复杂度为O(1),出队操作时间复杂度为O(n)。因此,使用循环队列可大大降低出队操作的时间复杂度。
所谓循环队列,即使用两个指针分别指向队列的头和尾,即头指针和尾指针,而不必关注用于存储队列数据的数组下标。此处规定:头指针为front,尾指针为rear,头指针指向队列的第一个元素,尾指针指向队列最后一个元素的后面的一个位置,因此。不难发现,当头指针front与尾指针rear值相等时,队列为空。
特别注意:最难理解的部分,应是何时队列为满,不可再执行插入操作。此处规定,队列为空时,队列中不包含元素,队列为满时,修改条件,保留一个元素空间,也就是说,队满时,数组中还有一个空余空间,即(rear+1)% QueueSize == front 时,队满。(使用文字说明过于抽象,详见下图)
计算队列长度的公式:(rear-front+QueueSize)% QueueSize
此处仅奉上循环队列的类定义与必要类方法,而不阐明主函数。
#include <iostream>
#include