关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
10-17 20:23
广东南华工商职业学院 Web前端 点赞 评论 收藏
分享
10-24 09:22
重庆三峡学院 C++ 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我是面试官,请用一句话让我破防 #
16084次浏览 100人参与
# 美团开奖 #
183385次浏览 969人参与
# 快手技术岗信息交流阵地 #
15754次浏览 82人参与
# 校招生月薪1W算什么水平 #
15354次浏览 112人参与
# 中美关税战对我们有哪些影响 #
37793次浏览 306人参与
# i人适合做什么工作 #
7923次浏览 81人参与
# “vivo”个offer #
33007次浏览 247人参与
# 读研or工作,哪个性价比更高? #
75241次浏览 762人参与
# 华为保温 #
102426次浏览 383人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
17214次浏览 79人参与
# 小厂实习有必要去吗 #
69916次浏览 344人参与
# 哪些行业值得去? #
2907次浏览 40人参与
# 秋招什么时候开投比较合适? #
109837次浏览 807人参与
# 如果秋招能重来,我会____ #
29650次浏览 255人参与
# 华为池子有多大 #
107479次浏览 748人参与
# 美团求职进展汇总 #
2806064次浏览 23836人参与
# 上班后和你想的一样吗? #
87487次浏览 666人参与
# 苦尽甘来时,再讲来时路 #
26312次浏览 359人参与
# 为了实习逃课值吗? #
23194次浏览 214人参与
# 大家实习每天都在干啥 #
97135次浏览 536人参与
# 工作压力大怎么缓解 #
119689次浏览 1112人参与
# 如果上班像打游戏,你最想解锁什么技能 #
5627次浏览 55人参与
