我这里情况是这样的,队为空时:queue.front = queue.rear = 0;队满时:(PtrQ->rear+1)%MaxSize == PtrQ->front。很多人肯定会对mod有疑问,你就考虑当PtrQ->rear+1=MaxSize 的时候,如果不mod的话那么rear下一个位置就溢出了,也不会等于front了。
#include <stdio.h>
#define N 5
struct QNode{
int data[N];
int rear;
int front;
};
typedef struct QNode *Queue;
void AddQ(Queue PtrQ, int m) {
if((PtrQ->rear+1)%N == PtrQ->front) {
printf("队列满");
return;
}
PtrQ->rear = (PtrQ->rear+1) % N;
PtrQ->data[PtrQ->rear] = m;
}
int DeleteQ(Queue PtrQ) {
if(PtrQ->front == PtrQ->rear) {
printf("队为空");
return -1;
}
else
{
PtrQ->front = (PtrQ->front+1)%N;
return PtrQ->data[PtrQ->front];
}
}
int main()
{
struct QNode queue;
queue.front = queue.rear = 0;
for(int i = 0; i < 3; i++)
AddQ(&queue,i+1);
for(int i = 0; i < 3; i++)
printf("%d ",DeleteQ(&queue));
return 0;
}