双端链表的实现由listNode 和list 两个数据结构构成
typedef struct listNode { //双端链表的节点
// 前驱节点
struct listNode *prev; //listNode 带有prev 和next 两个指针,因此,对链表的遍历可以在两个方向上进行:从表头到表尾,或者从表尾到表头。
// 后继节点
struct listNode *next;
// 值
void *value;
}
typedef struct list { //双端链表本身
// 表头指针
listNode *head; //list 保存了head 和tail 两个指针,因此,对链表的表头和表尾进行插入的复杂度为(1) ——这是高效实现LPUSH 、RPOP 、RPOPLPUSH 等命令的关键
// 表尾指针
listNode *tail;
// 节点数量
unsigned long len; //list 带有保存节点数量的len 属性,所以计算链表长度的复杂度仅为(1) ,这也保证了LLEN 命令不会成为性能瓶颈
// 复制函数 用于新增节点
void *(*dup)(void *ptr);
// 释放函数 用于删除节点
void (*free)(void *ptr);
// 比对函数
int (*match)(void *ptr, void *key);
}
redis数据结构-双端链表
猜你喜欢
转载自blog.csdn.net/m0_37780228/article/details/86477128
今日推荐
周排行