redis 的 list 结构
链表的结构
//普通的双端链表
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的链表实现的特性
- 双端,获取某个节点的前置节点和后置节点的复杂度都是O(1);
- 无环,头的prev指针和表尾节点的next指针都指向NULL,对链表的访问以NULL为终点。
- 带链表长度的计数器
- 多态。