链表
链表特性:增删快,查询慢,高效的节点重排能力,顺序行的节点访问方式
Redis中使用的链表:发布与订阅、慢查询、监视器、保存多个客户端的状态信息和构建客户端输出缓冲区(output buffer)。
1. 链表和链表节点的实现
链表的结构:
使用多个listNode结构可以组成链表,使用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;
list结构为链表提供了表头指针head,表尾指针tail,以及链表长度计数器len。dup、free和match则用于实现多态链表所需的类型特定函数:
(1)dup 函数用于复制链表节点保存的值;
(2)freee 函数用于释放链表节点保存的值;
(3)match 函数用于对比链表节点所保存的值和另一个值是否相等。