未完待续…
链表list
1.简介:
离散,无序的数据结构。链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。链表被广泛用于实现 Redis 的各种功能, 比如列表键, 发布与订阅, 慢查询, 监视器, 等等。
2.定义
/*
*链表节点
*/
typedef struct listNode {
struct listNode *prev;// 前置节点
struct listNode *next;// 后置节点
void *value;// 节点的值,多态,void* 保存节点的值
} listNode;
/*
*双端链表迭代器
*/
typedef struct listIter {
listNode *next;// 当前迭代到的节点
int direction;// 迭代的方向
} listIter;
/*
*双端链表的封装
*链表表头节点的前置节点和表尾节点的后置节点都指向 NULL , 所以 Redis 的链表实现是无环链表。
*/
typedef struct list {
listNode *head;// 表头节点
listNode *tail;// 表尾节点
unsigned long len;// 链表所包含的节点数量
void *(*dup)(void *ptr);// 节点值复制函数,函数指针:(*dup),返回类型void*
void (*free)(void *ptr);// 节点值释放函数
int (*match)(void *ptr, void *key);// 节点值对比函数
} list;