Redis数据结构——跳跃表

跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中的元素的成员是比较长的字符串时,Redis就会使用跳跃表作为有序集合键的底层实现。

Redis的跳跃表又redis.h/zskiplistNode和redis.h/zskiplist两个结构定义,其中zskiplistNode结构用于表示跳跃表节点,而zskiplist结构用于保存跳跃表节点的相关信息,比如节点的数量,以及指向表头节点和表尾节点的指针。

跳跃表节点的结构定义:
typedef struct zskiplistNode{
  //后退指针
  struct zskiplistNode *backward;
 //分值
 double score;
 //成员对象
 robj *obj;
 //层

struct zskiplistLevel{
struct zskiplistNode *forward ;//前进指针
unsigned int span;//跨度

}level[];

}zskiplistNode

跳跃表结构定义:
typedef struct zskiplist{
//表示表头节点和表尾节点
struct zskiplistNode *header,*tail;
//表中节点的数量
unsigned long leagth;
//表中层数最大的节点的层数
//int level;
}zskiplist

header,tail指针分别指向跳跃表的表头和表尾节点,通过这两个指针,程序定位表头和表尾节点的复杂度为O(1)。
通过使用length属性来记录节点的数量,程序可以在O(1)复杂度内返回跳跃表的长度。
level属性则用在O(1)复杂度内获取跳跃表中层高最大的那个节点的层数量,注意表头节点的层高并不计算在内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值