跳躍表是一種有序數(shù)據(jù)結構,它通過在每個節(jié)點中維持多個指向其他節(jié)點的指針,從而達到快速訪問節(jié)點的目的妈嘹。
《Skip lists: A probabilistic alternative to balanced trees 》
/*
* 跳躍表
*/
typedef struct zskiplist {
// 表頭節(jié)點和表尾節(jié)點
struct zskiplistNode *header, *tail;
// 表中節(jié)點的數(shù)量
unsigned long length;
// 表中層數(shù)最大的節(jié)點的層數(shù)
int level;
} zskiplist;
/* ZSETs use a specialized version of Skiplists */
/*
* 跳躍表節(jié)點
*/
typedef struct zskiplistNode {
// 成員對象
robj *obj;
// 分值
double score;
// 后退指針
struct zskiplistNode *backward;
// 層
struct zskiplistLevel {
// 前進指針
struct zskiplistNode *forward;
// 跨度
unsigned int span;
} level[];
} zskiplistNode;
每層都有兩個屬性,一個前進指針绍妨,用于訪問位于表尾方向的其他節(jié)點润脸,跨度記錄了當前指針所指向節(jié)點和當前節(jié)點的距離。對于節(jié)點的后退指針(backward)他去,每個節(jié)點只有一個后退指針毙驯,每次只能后退至前一個指針。