循环队列队满条件

队头指针在队尾指针的下一位置时,队满。 Q.front == (Q.rear + 1) % MAXSIZE 因为队头指针可能又重新从0位置开始,而此时队尾指针是MAXSIZE - 1,所以需要求余。
当队头和队尾指针在同一位置时,队空。 Q.front == Q.rear;

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 #define MAXSIZE 100  //最大队列长度
 4 #define OK 1
 5 #define ERROR 0
 6 typedef int ElemType;
 7 typedef int Status;
 8 
 9 typedef struct {
10     ElemType *base;  //队列空间
11     int front;   //队头指针
12     int rear;       //队尾指针,若队尾不为空,则指向队尾元素的下一个位置
13 }SqQueue;
14 
15 //初始化循环队列
16 Status initQueue(SqQueue &Q) {
17     Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType));  //申请空间
18     Q.front = Q.rear = 0;       //队空
19     return OK;
20 }
21 
22 //入队
23 Status enQueue(SqQueue &Q, ElemType e) {
24     if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //队满,无法添加
25     Q.base[Q.rear] = e;  //插入元素
26     Q.rear =  (Q.rear + 1) % MAXSIZE; //队尾指针+1
27     return OK;
28 }
29 
30 //出队
31 Status deQueue(SqQueue &Q, ElemType &e) {
32     if (Q.front == Q.rear) return ERROR; //队空,无法删除
33     e = Q.base[Q.front];
34     Q.front = (Q.front + 1) % MAXSIZE;  //队头指针+1
35     return OK;
36 }
37 
38 //返回队列长度
39 Status length(SqQueue &Q) {
40     return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; 
41 }
42 ————————————————
43 版权声明:本文为CSDN博主「this.」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
44 原文链接:https://blog.csdn.net/u010429311/article/details/51043149
原文地址:https://www.cnblogs.com/hongdoudou/p/12544351.html