关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
03-27 17:33
门头沟学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 设计人如何选offer #
97952次浏览 680人参与
# 找工作,行业重要还是岗位重要? #
7028次浏览 88人参与
# 五一之后,实习真的很难找吗? #
44717次浏览 313人参与
# 盲审过后你想做什么? #
12386次浏览 110人参与
# 外包能不能当跳板? #
22063次浏览 191人参与
# 领导秒批的请假话术 #
9717次浏览 74人参与
# 考研可以缓解求职焦虑吗 #
20640次浏览 244人参与
# 五一假期,你打算“躺”还是“卷”? #
26980次浏览 408人参与
# 面试等了一周没回复,还有戏吗 #
115312次浏览 1072人参与
# 找工作前vs找工作后的心路变化 #
7140次浏览 64人参与
# 牛友们的论文几号送审 #
27168次浏览 623人参与
# 你喜欢工作还是上学 #
37399次浏览 409人参与
# 应届生薪资多少才合理? #
3061次浏览 24人参与
# 写简历别走弯路 #
714192次浏览 7850人参与
# 如果有时光机,你最想去到哪个年纪? #
43227次浏览 766人参与
# 如何缓解入职前的焦虑 #
171779次浏览 1267人参与
# 每人推荐一个小而美的高薪公司 #
72826次浏览 1357人参与
# 硬件人,你被哪些公司给挂了 #
46522次浏览 720人参与
# 如果不工作真的会快乐吗 #
101027次浏览 866人参与
# 大疆的机械笔试比去年难吗 #
69572次浏览 602人参与