1. 概述
跳跃表是一种有序的数据结构, 他通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的.
大部分情况下, 跳跃表的效率可以和平衡树相媲美.
Redis中只在两处用到了跳跃表, 一个是实现有序集合, 另一个是 集群节点中国用作内部数据结构.
2. 基本结构
typedef struct zskiplistNode { sds ele; // double score; // 分值 struct zskiplistNode *backward; // 后退指针 struct zskiplistLevel { struct zskiplistNode *forward; // 前进指针 unsigned long span; // 跨度 } level[]; // 多层连接指针 } zskiplistNode; typedef struct zskiplist { struct zskiplistNode *header, *tail; // 头节点 尾节点 unsigned long length; // 节点个数 int level; // 最高层数 } zskiplist; typedef struct zset { dict *dict; // 字典 zskiplist *zsl; // 跳跃表 } zset;