Redis数据结构之SkipList

SkipList是一种通过增加索引层级来提高查询效率的数据结构,它基于传统链表并允许跳过查找,从而达到近似O(logN)的时间复杂度。Redis中的SkipList节点包含score和ele,按score排序,相同score时按ele字典序排序。节点可以有1到32层随机数目的指针,层级越高,跨度越大,使得其操作效率接近红黑树但实现更简单。
摘要由CSDN通过智能技术生成

Redis数据结构之SkipList

传统链表和跳表

首先跳表是一个链表,但是跳表在传统链表的基础上增加了类似索引的层级指针,是用空间换时间的数据结构;

传统链表的,查询时间复杂度是O(n),因为只能一个一个往下找,而跳表顾名思义可以跳着查找,从而加快查找效率;
跳表示例
像这样的层级指针最多可以有32层,效率和红黑树差不多;

SkipList结构

  • 链表结构
typedef struct zskiplist {
	//头尾节点指针
	struct zskiplistNode *header, *tail;l
	/节点数量
	unsigned long length;
	//最大的索引层级,默认是1
	int level;
}zskiplist;	
  • 节点结构
typedef struct zskiplistNode {
	sds ele; //节点存储的值
	double score; //节点分数,排序、查找用
	struct zskiplistNode *backward; //前一个节点指针
	struct zskiplistLevel {
	struct zskiplistNode *forward; //下一个节点指针
	unsigned long span; //索引跨度
	} leve[]; //多级索引数组
}zskiplistNode ;

跳表

SkipList的特点:

  • 跳跃表是一个双向链表,每个节点都包含score和ele值
  • 节点按照score值排序,score值一样则按照ele字典排序b
  • 每个节点都可以包含多层指针,层数是1到32之间的随机数
  • 不同层指针到下一个节点的跨度不同,层级越高,跨度越大
  • 增删改查效率与红黑树基本一致,实现却更简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值