zoukankan      html  css  js  c++  java
  • 跳跃表

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

    跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。

    在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。

    redis使用跳跃表作为有序集合键的底层实现之一。

    和链表、字曲等数据结构被广泛地应用在redis内部不同,redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构。

    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;    

     一个例子:

  • 相关阅读:
    java学习day03-循环结构
    java学习day03-运算符+分支结构
    java学习day02-标识符+关键字+注释+变量
    java学习day02-数据类型
    java学习day01-认识Java语言Hello world!
    私有仓库
    服务编排
    镜像原理
    docker部署应用
    docker数据卷和数据卷容器
  • 原文地址:https://www.cnblogs.com/losophy/p/10517293.html
Copyright © 2011-2022 走看看