参考资料
1. 跳跃表数据结构
跳跃表底层是一个有层级的有序链表,数据结构如下
typedef struct zskiplist {
struct zskiplistNode *header, *tail; // 跳跃表表头、表尾指针
unsigned long length; // 记录跳跃表中节点数量(表头节点的层数不计算在内)
int level; // 跳跃表中层级最大节点的层级(表头节点的层数不计算在内)
} zskiplist;
跳跃表中的每个节点数据结构如下
/* ZSETs use a specialized version of Skiplists */
typedef struct zskiplistNode {
sds ele; // 当前节点的值
double score; // 当前节点的score,用于排序
struct zskiplistNode *backward; // 后退指针,用于访问上一个节点
struct zskiplistLevel {
struct zskiplistNode *forward; // 前进指针,用于访问下一个节点
unsigned long span; // 当前节点与下一个节点的距离
} level[]; // 前进指针数组
} zskiplistNode;