1 定义:队列的头尾相接的顺序存储结构称为循环列队
2 如何判断队列满?
假设:front和rear只相差一个空格时就是满的情况。
队列最大尺寸为:QueueSize,
队列满的条件:(rear+1)%QueueSize==front
通用队列计算公式:(rear-front+QueueSIize)%QueueSize
循环队列的顺序存储结构
typedef int QElemType /*循环队列的顺序存储结构*/ typedef struct { QElemType data[MAXSIZE]; int front; int rear; }
循环队列的初始化代码
/*初始化一个空队列*/ statue InitQueue(SqQueue *Q) { Q->front=0; Q->rear=0; return OK; }
循环队列求队列长度代码
/*返回 Q的元素个数,也就是队列的当前长度* / int QueueLength(SqQueue Q) { return (Q.rear-Q.front+MAXSIZE)%MAXSIZE; }
循环队列的入队操作代码
/*若队列未满,则插入元素e为Q新的队尾元素*/ Status EnQueue(SqQueue *Q,QElemtype e) { if((Q->rear+1)%MAXSIZE==Q->front) /*队列满的判断*/ return ERROR; Q->data[Q->rear]=e; /*将元素e赋给队尾*/ Q->rear=(Q->rear+1)%MAXSIZE;/*rear指针向后移一个位置*/ /*若到最后则转到数组头部*/ return OK; }
循环队列的出队列操作代码
/*若队列不空,则删除Q中队头元素,用e返回其值*/ Status DeQueue(SqQueue *Q,QELEMType *e) { if (Q->front==Q->rear) /*队列空的判断*/ return ERROR; *e=Q->data[Q->front]; /*将队头元素赋值给e*/ Q->front=(Q->front+1)%MAXSIZE;/*front 指针向后移一位*/ /*若到最后则转到数组头部*/ return OK; }
来源:51CTO
作者:weixin_44462133
链接:https://blog.csdn.net/weixin_44462133/article/details/100671706