zoukankan      html  css  js  c++  java
  • 跨度实际上是用来计算排位(rank) 目标节点在跳跃表中的排位 有序集 排序计算

    跳跃表的实现 — Redis 设计与实现 http://redisbook.com/preview/skiplist/datastruct.html

    有序集合

    /* ZSETs use a specialized version of Skiplists */
    /*
     * 跳跃表节点
     */
    typedef struct zskiplistNode {

        // 成员对象
        robj *obj;

        // 分值
        double score;

        // 后退指针
        struct zskiplistNode *backward;

        // 层
        struct zskiplistLevel {

            // 前进指针
            struct zskiplistNode *forward;

            // 跨度
            unsigned int span;

        } level[];

    } zskiplistNode;

    /*
     * 跳跃表
     */
    typedef struct zskiplist {

        // 表头节点和表尾节点
        struct zskiplistNode *header, *tail;

        // 表中节点的数量
        unsigned long length;

        // 表中层数最大的节点的层数
        int level;

    } zskiplist;

    Redis源码学习之跳表 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1353762

     跨度的定义:从前驱节点到自身经历的节点数(包含前驱节点在内),如下图连接线上数字即为箭头指向节点的在对应层的跨度。

    17 | 跳表:为什么Redis一定要用跳表来实现有序集合? https://time.geekbang.org/column/article/42896

  • 相关阅读:
    容器占用空间的小问题
    一个ipv4到ipv6的移植问题
    一个linux内核模块移植到低版本时发生的异常
    一个发包乱序问题记录
    一个docker镜像中的目录删除不了问题
    C/C++(共用体与枚举)
    C/C++(数据结构栈的实现)
    C/C++(结构体)
    C/C++(内存管理)
    C/C++(指针数组)
  • 原文地址:https://www.cnblogs.com/rsapaper/p/13448910.html
Copyright © 2011-2022 走看看