跳表实现学习
1.介绍
2.源码
跳表节点:
/* ZSETs use a specialized version of Skiplists */
/**
* @brief 定义跳跃表节点的数据结构。
*
* 该结构体用于表示跳跃表中的一个节点,包含元素、分数、后向指针和多层链表信息。
*/
typedef struct zskiplistNode {
sds ele; /* 存储节点代表的元素,通常是有序集合中的成员名称。 */
double score; /* 存储元素对应的分数,用于节点排序。 */
struct zskiplistNode *backward; /* 指向前一个节点的指针,用于双向遍历。 */
/**
* @brief 定义跳跃表的每一层。
*
* 该结构体表示跳跃表的一层,包含指向下一个节点的指针和跨越的节点数。
*/
struct zskiplistLevel {
struct zskiplistNode *forward; /* 指向下一个节点的指针,用于在当前层中向前遍历。 */
unsigned long span; /* 表示从当前节点到 forward 指针所指向的节点之间跨越的节点数。 */
} level[]; /* 柔性数组,存储跳跃表的每一层信息。 */
} zskiplistNode;
跳表:
typedef struct zskiplist {
struct zskiplistNode *header, *tail;
unsigned long length;
int level;
} zskiplist;
zset存储结构:
typedef struct zset {
dict *dict;
zskiplist *zsl;
} zset;