front:队头指针
rear: 队尾指针
进队操作:rear=(rear+1)%MAX;
出队操作:front=(front+1)%MAX;
判断队满的操作:if(rear+1)%MAX==front return false;
判断队空的操作:if(front==rear) return false;
判断循环队列的长度 length=(rear-front+MAX)%MAX;
一个简单的循环队列的例子
//By Martin
#include<stdio.h>
#include<malloc.h>
#define MAX 10
typedef struct aa
{
int* data;
int front;
int rear;
}Queue;
Queue* init()
{
Queue* qu = (Queue*)malloc(sizeof(Queue));
qu->data = (int*)malloc(sizeof(int));
qu->front = qu->rear = 0;
return qu;
}
bool enqueue(Queue* qu,int data)
{
if ((qu->rear + 1) % MAX == qu->front)
return false;
qu->data[qu->rear] = data;
qu->rear = (qu->rear + 1) % MAX;
}
int pop(Queue* qu)
{
int data;
if (qu->front == qu->rear)
return 0;
data = qu->data[qu->front];
qu->front = (qu->front + 1) % MAX;
return data;
}
int main()
{
Queue* qu = init();
enqueue(qu, 1);
enqueue(qu, 2);
printf("%d\n", pop(qu));
printf("%d\n", pop(qu));
free(qu);
return 1;
}