#include
#include
#include
//循环队列
typedef struct {
int *data;//数据域
int maxsize;//最大长度
int rear, front;//队尾,队头
} CirQueue;
void InitCirQueue(CirQueue *q, int max) {//初始化
q->maxsize = max;
q->data = (int*)malloc(sizeof(int)*max);//动态分配内存空间
q->rear = 0;
q->front = 0;
}
int CirQueueisEmpty(CirQueue *q) {//判空
if (q->front == q->rear)//队头==队尾
return 0;
else {
return 1;
}
}
int CirQueueisFull(CirQueue *q) {//判满
if (q->front == (q->rear + 1) % (q->maxsize)) {//预留最后一个空间来做取余
return 0;
} else {
return 1;
}
}
void AddCirQueue(CirQueue *q, int x) {//添加
q->data[q->rear] = x;
q->rear = (q->rear + 1) % (q->maxsize);//超过最大长度添加则覆盖
}
int CirQueueDisplay(CirQueue *q) {// 显示
int x;
x = q->data[q->front];
q->front = (q->front + 1) % (q->maxsize);//移动队头
return x;
}
int CirQueueFront(CirQueue *q) {//取队头
int x = q->data[q->rear];
return x;
}
int main() {
CirQueue q;
InitCirQueue(&q, 5);
AddCirQueue(&q, 1);
AddCirQueue(&q, 2);
AddCirQueue(&q, 5);
printf("%d ",CirQueueDisplay(&q));
printf("%d ",CirQueueDisplay(&q));
printf("%d ",CirQueueDisplay(&q));
return 0;
}