循环队列
- 用一组地址连续的存储单元存放队列的数据元素
- 逻辑上循环的队列
- 尾进头出
typedef struct {
int front;
int rear;
int size;
int *data;
} CircularQueue_t;
队列初始化
int CircularQueueInit(CircularQueue_t *Q, int size)
{
Q->size = size;
Q->front = 0;
Q->rear = 0;
int *p = (int *)malloc(sizeof(int) * Q->size);
if (p == NULL) {
return 1;
}
Q->data = p;
return 0;
}
队列判空
int CircularQueueIsEmpty(CircularQueue_t Q)
{
if (Q.front == Q.rear) {
return 0;
}
return 1;
}
队列判满
int CircularQueueIsFull(CircularQueue_t Q)
{
if ((Q.rear+ 1) % Q.size == Q.front) {
return 0;
}
return 1;
}
清空队列
void CircularQueueClear(CircularQueue_t *Q)
{
Q->front = 0;
Q->rear = 0;
}
入队
int EnCircularQueue(CircularQueue_t *Q, int e)
{
if (CircularQueueIsFull(*Q) == 0) {
return 1;
}
Q->data[Q->rear++] = e;
Q->rear %= Q->size;
return 0;
}
出队
int DeCircularQueue(CircularQueue_t *Q, int *e)
{
if (CircularQueueIsEmpty(*Q) == 0) {
return 1;
}
*e = Q->data[Q->front++];
Q->front %= Q->size;
return 0;
}
销毁队列
void CircularQueueDestroy(CircularQueue_t *Q)
{
Q->front = 0;
Q->rear = 0;
free(Q->data);
Q->data = NULL;
}