#include <stdio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 1024
// 循环队列
//******************************************************
//计算队列当前长度通用公式:(rear-front+MSXSIZE)%MAXSIZE
//******************************************************
//判断队列满的条件:(rear + 1) % MAXSIZE == front;
//******************************************************
typedef struct
{
int data[MAXSIZE];
int front; //头指针
int rear; //尾指针,若队列不空,指向队尾元素的下一个位置
}SqQueue;
int InitQueue(SqQueue *Q) //初始化一个空队列
{
Q->front = 0;
Q->rear = 0;
return OK;
}
int QueueLength(SqQueue Q) //求队列当前长度
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
int EnQueue(SqQueue *Q, int e) //入队
{
if((Q->rear + 1) % MAXSIZE == Q->front) //队列已满
{
return ERROR;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXSIZE; //rear指针向后移动一位,如果超出则转到数组头部,形成循环。
return OK;
}
int DeQueue(SqQueue *Q, int *e)
{
if(Q->rear == Q->front) //队列已空
{
return ERROR;
}
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE; //front指针向后移动一位,如果超出则转到数组头部
return OK;
}
int main()
{
int i,e;
SqQueue Q;
InitQueue(&Q);
for(i = 0; i < 10; i++)
{
EnQueue(&Q, i);
}
DeQueue(&Q, &e);
printf("%d\n", e);
DeQueue(&Q, &e);
printf("%d\n", e);
return 0;
}