关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 三月的小目标 #
60119次浏览 868人参与
# 滴滴笔试 #
35946次浏览 205人参与
# 美团笔试 #
704462次浏览 4678人参与
# 你上一次加班是什么时候? #
138447次浏览 770人参与
# AI岗位暴涨12倍,你会转AI赛道吗? #
6546次浏览 119人参与
# 你听到的“最没用”的秋招建议 #
53805次浏览 326人参与
# 金三银四,你的春招进行到哪个阶段了? #
18934次浏览 257人参与
# 米哈游笔试 #
559511次浏览 1109人参与
# vivo笔试 #
13325次浏览 124人参与
# 小米编程考试 #
32455次浏览 153人参与
# 今天你投了哪些公司? #
185099次浏览 3142人参与
# 27届实习投递记录 #
1239次浏览 24人参与
# 实习进度记录 #
1214116次浏览 11768人参与
# 秋招你经历过哪些无语的事 #
104402次浏览 600人参与
# 字节7000实习来了,你投了吗? #
5885次浏览 26人参与
# 职场上哪些行为很加分? #
337711次浏览 3738人参与
# AI项目实战 #
8269次浏览 404人参与
# 你感受到金三银四了嘛? #
84061次浏览 678人参与
# 虽然0面试,但今天___,夸夸自己 #
11215次浏览 196人参与
# 蚂蚁集团笔试 #
4473次浏览 27人参与
