第3章 链表
2015-08-24 16:44
169 查看
1. 链表和链表节点的实现
每个链表节点使用一个adlist.h/listNode结构来表示/*
* 链表节点
*/
typedef struct listNode {
// 前驱节点
struct listNode *prev;
// 后继节点
struct listNode *next;
// 值
void *value;
} listNode;
使用adlist.h/list来持有链表
/*
* 链表
*/
typedef struct list {
// 表头指针
listNode *head;
// 表尾指针
listNode *tail;
// 节点数量
unsigned long len;
// 复制函数
void *(*dup)(void *ptr);
// 释放函数
void (*free)(void *ptr);
// 比对函数
int (*match)(void *ptr, void *key);
} list;
Redis链表特性:
双端
无环:表头节点的prev指针和表尾节点的next指针都指向NULL,对链表的访问以NULL为终点
带表头指针和表尾指针
带链表长度计数器
多态:链表节点使用void *指针来保存节点值,并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值
2. 链表和链表节点的API
listSetDupMethodlistGetDupMethod
listSetFreeMethod
listGetFreeMethod
listSetMatchMethod
listGetMatchMethod
listLength
listFirst
listLast
listPreNode
listNextNode
listNodeValue
listCreate
listAddNodeHead
listAddNodeTail
listInsertNode
listSearchKey
listIndex
listDelNode
listRotate 将链表的表尾节点弹出,然后将被弹出的节点插入到链表的表头,成为新的表头节点
listDup 复制一个给定链表的副本
listRelease 释放给定链表,以及链表中的所有节点
相关文章推荐
- rabbitMQ 和 protoBuf 整合
- JAVA UUID 生成
- Matlab自动控制系统应用
- php利用smtp类轻松的发送电子邮件
- python iterator迭代器、yield、container容器和for循环的联系与区别
- Java贪吃蛇程序
- Apache shutdown unexpectedly启动错误解决方法
- 从C++到COM,学习笔记(1)
- 【转】KiB、MiB与KB、MB的区别
- centos 7.1开机/etc/rc.local脚本不执行的问题
- Xcode6 运行程序后,右侧Debug区域的Memory显示空白解决方法
- 自定义cell
- 十进制,二进制,八进制
- 一个简单的支持unicode的tstring类
- C++中的操作符重载
- 设计模式: 策略模式的实现
- 小米智能家居出生日期选择框的实现源码
- 文件操作篇(1.文件的创建)
- 简单的client/server模型
- hdu 5418 Victor and World(旅行商问题)