博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis数据结构之跳跃表
阅读量:4170 次
发布时间:2019-05-26

本文共 1134 字,大约阅读时间需要 3 分钟。

跳跃表在每个节点中维持多个指向其他节点的指针,可快速访问节点且有序

跳跃表查找复杂度为平均O(logN),最坏O(N)
跳跃表使用于有序集合元素数量比较多或者元素是比较长的字符串的场景。

跳跃表节点

typedef struct zskiplistNode{
//层 struct zskiplistNode{
//前进指针 struct zskiplistNode *forward //跨度 unsigned int span; } level[]; //后退指针 struct zskiplistNode *backward //分值 double score; //成员对象 robj *obj; } zskiplistNode;

header: 指向跳跃表头节点

tail: 指向跳跃表尾节点
level : 记录跳跃表内层数最大的节点的层数
length : 跳跃表节点数量
层:每个层都包含前进指针和跨度,前进指针指向表尾方向的其他节点,跨度是记录前进指针指向的节点和当前节点的距离。
后退指针:用BW标记,指向当前节点的前一节点
分值:节点中保存的分值,节点按各自保存的分值由小到大排列

在跳跃表中,各节点保存的成员对象必须唯一,但多个节点保存的分值却可以相同,分值相同的节点将按照成员对象在字典序中的大小排列,从小到大排序。

在这里插入图片描述

跳跃表实现
type def struct zskiplist{
structz skiplistNode *header,*tail; //节点数量 unsigned long length; //层数最大节点的层数 int level; } zskiplist;
跳跃表常用API
函数 作用 时间复杂度
zslCreate 新建跳跃表 O(1)
zslFree 添加新节点 平均O(logN),最坏O(N)
zsldellte 删除节点 平均O(logN),最坏O(N)
zslGetRank 返回节点在跳跃表中排位 平均O(logN),最坏O(N)
zslGetRank 返回节点在跳跃表中节点 平均O(logN),最坏O(N)
zslIsInRange 给定分值范围,返回在该范围的所有节点 O(1)
zslDeleteRangeByScore 给定分值范围,删除在该范围的所有节点 O(N)

转载地址:http://wfkai.baihongyu.com/

你可能感兴趣的文章
MySQL Workbench建表时PK, NN, UQ, BIN, UN, ZF, AL的意思
查看>>
一个通过Java连接MYSQL数据库的代码
查看>>
登陆的参数 List
查看>>
android 向数据库写入图片信息 读取图片信息
查看>>
Android.Could not find *.apk
查看>>
使用next()和nextLine()方法接收从键盘输入字符串型数据
查看>>
android 定位 代码关于android gps定位最容易出现崩溃的问题总结(转)
查看>>
JNI
查看>>
DownloadManager下载管理类2.3新增API介绍
查看>>
Android基于TranslateAnimation的动画动态菜单
查看>>
android NDK中的GCC编译器
查看>>
Android NOtification 使用
查看>>
Android的SharedPreferences保存与删除数据简单实例
查看>>
android 如何从sqlite读取数据到spinner下拉中显示
查看>>
Android实现开机自动运行程序
查看>>
最近几天搭建MySql且连接问题总结
查看>>
搭建Tomcat
查看>>
在MyEclipse中运行tomcat出现Error initializing endpoint错误
查看>>
JSP文件中的上传功能(JSP中的相对路径)------JSP
查看>>
jsp中上传文件的源代码
查看>>