队头指针在队尾指针的下一位置时,队满。 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