这个代码实现循环储存,导致存储元素个数为MAXSIZE - 1;
判断队列长度(rear-front + MAXSIZE )%MAXSIZE;
判断队列满(rear+1)%MAXSIZE == front;
判断队列空front == rear;
#include <iostream>
using namespace std;
#define MAXSIZE 6
typedef struct
{
int data[MAXSIZE];
int front;//头标志
int rear;//尾标志
}SqQueue;
int InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return 0;
}
int EnQueue(SqQueue *Q,int e)
{
if(((Q->rear + 1) % MAXSIZE == Q->front))
{
Q->data[Q->rear] = e;
printf("队列满!\n");
return 0;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 0;
}
int DeQueue(SqQueue *Q,int *e)
{
if(Q->front == Q->rear)
{
*e = Q->data[Q->front];
printf("队列空!\n");
return 0;
}
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 0;
}
int Length(SqQueue Q)
{
return (Q.rear - Q.front + 1 + MAXSIZE) % MAXSIZE;
}
int main()
{
int len;
int i;
int e;
SqQueue Q;
InitQueue(&Q);
for(i = 1; i < 7; i++)
{
EnQueue(&Q,i);
}
len = Length(Q);
printf("len = %d\n",len);
for(i = 1; i < 7; i++)
{
DeQueue(&Q,&e);
printf("num = %d\n",e);
}
return 0;
}