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

  • 相关阅读:
    Linux下C编程入门(1)
    Git 常用命令速查表
    Git Cheat Sheet 中文版
    Linux 在一个命令行上执行多个命令
    一个奇怪的错误的警示
    模块化编程实例(一)
    含有指针变量的结构体的指针的应用
    iOS 开发加密做法
    关于设置shadowPath的重要性
    关于设置shadowPath的重要性
  • 原文地址:https://www.cnblogs.com/rsapaper/p/13448910.html
Copyright © 2011-2022 走看看