typedef struct zskiplistNode {
    // 分值
    double score;
    // 成员对象
    robj *obj;
    // 后退指针
    struct zskiplistNode *backward;
    // 层
    struct zskiplistLevel {
        // 前进指针
        struct zskiplistNode *forward;
        // 跨度
        unsigned int span;
    } level[];
} zskiplistNode;

跳表的节点查找算法可以描述如下:
从跳表的头节点开始。
 在当前层级上,从最右侧开始,逐个比较节点的值,直到找到一个节点的值大于或等于目标值。
 如果当前节点的值等于目标值,则返回该节点,查找结束。
 如果当前节点的值大于目标值,则向下移动到下一层级。
 重复步骤2和3,直到找到目标节点或者到达跳表的底层。
跳表的插入算法描述如下:
随机生成层数。
 插入新节点时,需要在每一层都更新对应的指针,使得新节点能够正确地插入到每一层中。



















