您的位置:首页 > 理论基础 > 数据结构算法

【数据结构练习】基于线性结构的队列

2015-05-26 23:11 405 查看
普通的练习代码

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: