redis中的双向链表源码剖析
1 基本结构
从下面的源码可以看出,这是个双向链表,包含
- listNode : 节点
- listIter : 迭代器
- list : 链表
我们不难看出,listNode使用 void *
来存放数据,因此数据类型不限定, 而迭代器则使用 direction
标明迭代方向, 在 list
中,三个函数指针表示了三种不同的操作:
- duplicate, 复制
- free, 释放
- match, 比较
之所以使用这三个函数指针,是因为value的真实类型不同,所进行的操作也不同,使用函数指针可以为不同类型的链表指定不同的操作
1 | typedef struct listNode { |
该链表操作分割如下
1 | list *listCreate(void); //创建链表 |