0
点赞
收藏
分享

微信扫一扫

Redis跳表数据结构



-- 《Redis设计与实现》



t_zset.c



时间复杂度:O(logN)



 



Redis跳表数据结构_Redis源码解析

 



数据结构概述说明:



- 每个跳表层高1~32层



- 跳跃表是有序集合的实现之一



- 按照分值升序排序



其核心结构源码如下: 

typedef struct zskiplistNode {// 保存当前跳跃表的节点信息
 
 
    sds ele;
 
 
    double score;// 分值
 
 
    struct zskiplistNode *backward;// 后退指针
 
 
    struct zskiplistLevel {// 这里是1~32层的节点
 
 
        struct zskiplistNode *forward;// 前进指针
 
 
        unsigned long span;// 跨度
 
 
    } level[];
 
 
} zskiplistNode;
 
 
typedef struct zskiplist {// 保存整个跳跃表的头尾指针、长度、level
 
 
    struct zskiplistNode *header, *tail; // 指向跳跃表头尾节点
 
 
    unsigned long length;// 跳跃表长度
 
 
    int level;// 记录跳跃表中最大的那个层数
 
 
} zskiplist;


下面我们大概说说核心方法的执行方式


1 创建一个新的跳表(函数:zslCreate)



创建zskiplist,然后填充默认属性



2 插入(函数:zslInsert)



从最大的层数据开始往下遍历,找到当前层最大分值(<= 当前待插入分值)的节点(记录在update[i])和记录跨度(记录在rank[i])。然后将新插入的节点的各层指向相同蹭的下一个节点。



3 内部删除函数(函数:zslDeleteNode)



删除对应节点



其他自己看gitee~~~~~~~~~~~



 



 



 



 



 



 



 



 



 



 

举报

相关推荐

0 条评论