1.概念
循环队列是一种基于数组实现的队列数据结构,其特点是队列的头尾相接,形成一个环形结构。这种设计可以有效地利用数组空间,并解决了普通队列在出队操作后无法复用已出队元素所占用的空间的问题。
循环队列通常包含两个指针:一个指向队列的头部(front),一个指向队列的尾部(rear)。在循环队列中,当队列满时,rear 指针紧跟在 front 指针的后面,而不是指向数组的末尾。这样,当 rear 指针再向后移动一位时,即便 rear 指针指向数组的最后一个位置,也能够绕回到数组的起始位置。
2.代码
2.1初始化
2.2入队
2.3出队
2.4输出
2.5测试
2.6结果
3.代码解释
1.结构体定义:
这里定义了一个名为 circlequeue
的结构体,包含一个数组 data
用于存储队列元素,以及两个整型变量 front
和 rear
分别表示队列的头部和尾部指针。使用 typedef
定义了指向该结构体的指针类型 circlequeueptr
。
2.初始化:
initqueue
函数用于创建并初始化一个循环队列,分配了一个 circlequeue
结构体的内存空间,并将头部和尾部指针初始化为 0。
3.入队
enqueue
函数用于将元素 e
入队,首先检查队列是否已满,如果满则输出提示信息并返回;否则将元素插入到队列尾部,并更新尾部指针。
4.出队
dequeue
函数用于从队列中出队一个元素,首先检查队列是否为空,如果为空则输出提示信息并返回 -1
;否则将头部元素取出并更新头部指针,然后返回取出的元素值。
5.输出队列
outputqueue
函数用于输出队列中的所有元素,首先检查队列是否为空,如果为空则输出提示信息;否则通过循环遍历队列的元素,并逐个输出。
4.特殊判断条件:
判断队列是否为空:
paraq->front == paraq->rear
判断队列是否满了:
(paraq->rear + 1) % TOTAL_SPACE == paraq->front
5.示意图: