由于循环队列的实现思想比较简单,这里不做过多的阐述,可以参考第一个文章的顺序链表存储结构的实现
#include <stdio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 30
typedef int ElemType;
typedef int Status;
//循环队列的存储结构
typedef struct
{
ElemType data[MAXSIZE];
int front; //指向第一个元素下标的指针
int rear; //指向最后一个元素的下一个位置的下标的指针
}Queue;
//初始化
Status Init(Queue *q)
{
q -> front = 0;
q -> rear = 0;
return OK;
}
//入队列
Status InQueue(Queue *q, ElemType elem)
{
if(q -> rear + 1 == q -> front) return ERROR;
q -> data[q -> rear] = elem;
q -> rear = (q -> rear + 1) % MAXSIZE;
return OK;
}
//出队列
Status OutQueue(Queue *q, ElemType *elem)
{
if(q -> front == q -> rear) return ERROR;
*elem = q -> data[q -> front];
q -> front = (q -> front + 1) % MAXSIZE;
return OK;
}
//获取长度
int Length(Queue q)
{
return (q.rear - q.front + MAXSIZE) % MAXSIZE;
}
int main(void)
{
Queue q;
Status statu;
statu = Init(&q);
if(statu == OK)
{
printf("%s : %d, %d\n", "Init", q.front, q.rear);
statu = InQueue(&q, 21);
if(statu == OK)
{
printf("%s : %d, %d, %d\n", "InQueue", q.front, q.rear, q.data[0]);
ElemType outElem;
statu = OutQueue(&q, &outElem);
//InQueue(&q, 22);
//InQueue(&q, 23);
// statu = OutQueue(&q, &outElem);
if(statu == OK)
{
printf("%s : %d, %d, %d\n", "OutQueue", q.front, q.rear, outElem);
printf("%s : %d\n", "Length", Length(q));
}
}
}
return 0;
}