# 3. 循环队列

1) 定义

队空 sq.front==sq.rear
队满 sq.front==sq.rear
或者:
	另外设一个标志存储队中元素个数num==0代表队空,num==MAXSIZE代表队满
	少用一个元素空间:
	队空:front==rear
	队满:(rear+1)%M==front

2) 基本操作

typedef struct
{
	datatype data[M] ;
	int front ;
    int rear ;
	int count ; // 记录队中元素个数
} cirqueue ;
//0) 初始化
	q->front=q->rear = 0;
//1) 判队空
	q.count == 0;
//2) 判队满
	q.count == M;
//3) 读队头元素
datatype get_queue (cirqueue q)
{
	if(q.count == 0 ){
        printf ( “queue null “ ) ;
        exit (0) ;
    }
	return ( q.data [q.front]);
}
//4) 入队
void enqueue(cirqueue * q, datatype x ){
    // 判队满
    if (q->count = = M) { printf(“over flow “) ; exit(0);}
    
	q->data[q->rear ] = x ;
	q->rear = (q->rear+1)% M ; // 插入元素 x
	q->count ++ ; // 修改表长
}
//5) 出队
datatype dequeue(cirqueue * q , datatype x ){
    // 判队空
    if(q->count == 0 ) {printf (“queue null”) ; exit(0); }
    
	x=q->data[q ->font];
	q->front = (q->front + 1)%M ; // 删除队头元素
	q->count-- ; // 修改表长
	return (x) ;
}
-->