循环队列的概念:
循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
但是循环队列的缺点就是需要我们额外的去判断是否超出容量以及是否为空或者为满,所以在实践中我们要额外注意一些细节。
我们在循环队列的结构体中设置了两个值front和rear(back)分别表示队列的头和尾,为避免出现队列溢出的情况我们可以添加了一个int类型的变量size来记录队列中有效元素个数以及判断是否队列已满,或者多开一个位置来解决无法判空或者判满的情况。区分队头元素和队尾元素我们将front为队头元素的位置,rear(back)则指向队尾元素的下个位置。
判断为空或者为满:当front==back时则队列为空,当(back+k)%(k+1)==front时队列已满。
初始化队列:初始时front==back,开k(数据个数)+1个空间。
插入数据入队尾:每一次插入之前都需要判断一下队列是否已满防止出现队列溢出的情况,插入成功返回true,插入失败则false。同时rear往后走一个位置,如果rear超出了最后一个节点的话则需要重新置为最开始的位置(0),在循环队列中判断是否超出循环最大的值以及将超出的值置为正常值时我们采用的是取模的方法,比这个模数小的值不变,比模数大则置为余数。
取出队头元素并删除:我们需要在每一次删除之前判断队列是否为空。同时将front往后挪动一个位置如果超出最大位置则用取模操作置为合理的位置
取出队头/队尾元素
最后将队列所占用空间释放,销毁队列。