普通的练习代码
#include <stdio.h>
#include <stdlib.h>
typedef struct _queue
{
int *arr;
int cap; //容量
int size; //该队列中存储有效数据的个数
int front; //指向队列的前端
int back; //指向队列的后端
}Queue;
//创建队列
Queue *queue_create(int cap)
{
Queue *queue = malloc(sizeof(Queue));
queue->arr = malloc(sizeof(cap) * cap);
queue->cap = cap;
queue->size = queue->front = queue->back = 0;
return queue;
}
//销毁队列
void queue_destroy(Queue **queue)
{
free((*queue)->arr);
free(*queue);
*queue = NULL;
}
//出队
int queue_pop(Queue *queue)
{
int data = queue->arr[queue->front];
queue->front = (queue->front + 1) % queue->cap;
queue->size--;
return data;
}
//入队
void queue_push(Queue *queue, int data)
{
queue->arr[queue->back] = data;
queue->back = (queue->back + 1) % queue->cap;
queue->size++;
}
//判空
int queue_empty(Queue *queue)
{
return queue->size == 0;
}
//判满
int queue_full(Queue *queue)
{
return queue->size == queue->cap;
}
//获取队列中有效数据个数
int queue_size(Queue *queue)
{
return queue->size;
}
//清空队列
void queue_clear(Queue *queue)
{
queue->front = queue->back = queue->size = 0;
}
//测试代码
int main()
{
int num = 1;
Queue *queue = queue_create(5);
while (!queue_full(queue))
{
queue_push(queue, ++num);
}
printf("size == %d\n", queue_size(queue));
while (!queue_empty(queue))
{
printf("%d ", queue_pop(queue));
}
printf("size == %d\n", queue_size(queue));
while (!queue_full(queue))
{
queue_push(queue, ++num);
}
printf("size == %d\n", queue_size(queue));
while (!queue_empty(queue))
{
printf("%d ", queue_pop(queue));
}
printf("1size == %d\n", queue_size(queue));
queue_destroy(&queue);
if (NULL == queue)
{
printf("queue was freed\n");
}
return 0;
}