zoukankan      html  css  js  c++  java
  • Redis 设计与实现(第五章) -- 跳跃表(skiplist)

    概述


    1.跳跃表的介绍

    2.跳跃表的数据结构

    跳跃表的介绍

    跳跃表是一个有序的数据结构,通过在每个节点维护多个执行其他节点的指针,从而达到快速访问的目的。

    在Redis中只有两个地方用到了跳跃表,一个是有序集合键,另一个是在集群节点作为Redis内部的数据结构。具体源码在本章不介绍了,感兴趣可以去查看zset中的源码,关于跳跃表的create,insert等操作。

    跳跃表的数据结构

    跳跃表节点数据结构:

    typedef struct zskiplistNode {
        robj *obj;  //保存的对象
        double score;  //分值,节点按照score排序,如果score一样,再比较obj大小
        struct zskiplistNode *backward;  //后退指针
        struct zskiplistLevel {  //层
            struct zskiplistNode *forward; //下一个节点指针
            unsigned int span;  //跨度
        } level[];
    } zskiplistNode;

    在Redis中通过zskiplist来持有跳跃表:

    typedef struct zskiplist {
        struct zskiplistNode *header, *tail;
        unsigned long length;  //长度
        int level;  //层数,1-32随机生成
    } zskiplist;

    跳跃表的遍历:

  • 相关阅读:
    XOR Clique
    Live Love
    Wannafly挑战赛24 A:石子游戏
    洛谷 P1060 :开心的金明
    洛谷P1049: 装箱问题
    牛客练习赛26 A:平面
    hihoCoder1151: 骨牌覆盖问题·二
    hihoCoder1143:骨牌覆盖问题·一
    hihoCoder1051 : 补提交卡
    TCP Socket的通讯框架
  • 原文地址:https://www.cnblogs.com/dpains/p/7602364.html
Copyright © 2011-2022 走看看