// 循环队列浪费一个位置
#include<stdio.h>
#include<stdlib.h>
typedef struct queue
{
int* elements;
int head;
int rear;
int capacity;
}queue;
void QueueInit(queue* q, int capacity);
void QueueDestroy(queue* q);
void QueuePush(queue* q, int elem);
int QueuePop(queue* q);
void QueueInit(queue* q,int capacity)
{
q->capacity = capacity;
q->elements = (int*)malloc(sizeof(int) * capacity);
if (q->elements == NULL)
exit(EXIT_FAILURE);
q->head = q->rear = 0;
}
void QueueDestroy(queue* q)
{
if(q->elements)
free(q->elements);
q->elements = NULL;
q->capacity = 0;
q->rear = q->head = 0;
}
void QueuePush(queue* q, int elem)
{
if ((q->rear + 1) % (q->capacity) == q->head)
printf("already full\n");
q->elements[q->rear] = elem;
q->rear = (q->rear + 1) % q->capacity;
}
int QueuePop(queue* q)
{
int ret;
if (q->head == q->rear)
{
printf("empty queue\n");
exit(EXIT_FAILURE);
}
ret = q->elements[q->head];
q->head = (q->head + 1) % q->capacity;
return ret;
}