1,链表结点的定义:
typedef struct listNode{
//前置节点
struct listNode *prev;
//后置节点
struct listNode *next;
//节点的值
void *value;
}listNode;
2,Redis中的链表的定义如下:
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;
3,Redis链表实现的特性可以总结如下:
1)双端:链表节点带有prev和next指针,获取某个节点的前置节点和后置节点的复杂度都是O(1)
2)无环:表头节点的prev指针和表尾节点的next指针都是指向NULL,对链表的访问以NULL为终点。
3)带有表头节点和表尾指针:程序获取链表的表头节点和表尾节点的复杂度是O(1)
4)带有联编长度计数器
5)多态:链表节点使用void*指针来保存节点值,并且通过dup、free、match三个属性为节点值设置类型特定函数,多以链表可以用于保存各种不同类型的值。