双端链表实现队列
2015-12-09 17:59
639 查看
这次实现队列还是用到了双端链表,和上篇的一样,也是双端链表实现的,简单么,下面写好了,上面直接调用。现在redis竟然是用C语言写的,而且底层实现也是双端链表,这是非常重要滴
queue.h文件
queue.c文件
queue.h文件
#ifndef _QUEUE_H_ #define _QUEUE_H_ #include "tools.h" typedef struct Queue { Dlist *dlist; //封装双端链表为队列的控制信息 }Queue; //队列的接口 Qeuue *queue_init(void); //对列的初始化 void destroy_queue(Queue **queue); //队列的销毁 void in(Queue *queue, void *value); //入队操作 Boolean out(Queue *queue); //出队操作 Boolean get_queue_front(Queue *queue, void **value); //得到队首元素 Boolean is_queue_empty(Queue *queue); //判断队列是否为空 int get_queue_count(Queue *queue); //得到队列元素个数 #endif
queue.c文件
#include "queue.h" //队列的初始化 Queue *init_queue(void) { Queue *queue = (Queue *)Malloc(sizeof(Queue)); queue->dlist = init_queue(); bzero(queue,sizeof(Queue)); return queue; } //队列的销毁 void destroy_queue(Queue **queue) { Dlist_node *p_node = NULL; if(queue == NULL || *queue == NULL){ return ; } destroy_dlist(&((*queue)->dlist)); free(*queue); *queue = NULL; } //入队操作 void in_queue(Queue *queue,void *value) { if(queue == NULL || value == NULL){ return ; } push_back(queue->dlist,value); } //出队操作 Boolean out_queue(Queue *queue) { if(queue == NULL || is_queue_empty(queue)){ return FALSE; } pop_front(queue->dlist); return TRUE; } //得到队首元素 Boolean is_queue_empty(Queue *queue) { return queue->dlist->count == ZERO; } //判断队列是否为空 Boolean get_queue_front(Queue *queue,void **value) { if(queue == NULL || value == NULL || is_stack_empty(queue) || get_front(queue->dlist,value) == FALSE{ return FALSE; } return TRUE; } //得到队列元素个数 int get_queue_count(Queue *queue) { if(queue == NULL){ return ERROR; } return get_dlist_count(queue->dlist); }
相关文章推荐
- mysql基础(六) 表删除时,报"Connot delete or update a parent row:a foreign key constraint fails"解决方案二
- 静态方法
- Android-Activity所应该了解的大概就这样。(中)
- URL加载系统的优化
- css选择器
- RedHat7配置Nginx实现多域名虚拟主机的SSL/TLS认证(实现单IP以不同证书服务于不同域名)
- 初识layer 快速入门
- 4-2-word2003-Word文本操作
- linux内核源码树构建
- 黑马第28期笔记2(程序测试)
- Swift第三天学习
- [Epub]-数字出版物制作-网页版-[1]
- Android Proguard 详解
- Lucene学习(三):综述Lucene的索引文件格式
- OC学习篇之---@class关键字的作用以及#include和#import的区别
- jq 实现上下排序的一段代码
- JS中的apply,call,bind深入理解
- codeforces 589F. Gourmet and Banquet 二分+网络流
- 【转】 测试人员的职业规划 --整理标注
- xml规范