队列 是只允许在一段进行插入操作,而在另一端进行删除操作的线性表 。
队列是一种先进先出的线性表格 允许插入的一段是 队尾, 允许删除的一段是队头。如图:
然后,我们用(q.rear - q.front +maxsize )%maxsize 求出 队列当前的长度
如图
因为这个rear 后索引 是可以 比front 小 ,也可以 比 front 大(因为是循环的 这两个指针都会在 0-4 的闭区间里 转换 ) 所以 呢,如果rear 比 front 小 ,那么长度就是 如果rear 大于 front 的话 ,长度 就是 rear - front 对吧 ? 如果 小于 呢?
那就是 一段是 rear 另外一端是 (maxsize -front ) - - 这很好理解把? 就是前面rear 一段加上后面 front 到 末端的那一段啊 ! 所以 无论 rear 和 front 在哪里 , 都可以 用 通式 (q.rear - q.front +maxsize )%maxsiz求出这个队列的长度
最后 附上代码 与 运行结果
:
#include<stdio.h>
#define maxsize 7
typedef char Qelemtype;
typedef struct
{
Qelemtype data[maxsize];//定义一个长为7的数组 -********其中有一个位置不存放数据 !
int front;
int rear;
} sqqueue;//取别名为sqqueue;
struct intiqueue(sqqueue *q)
{
q->front=0;//下标为 0开始
q->rear =0;<