关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
11-24 10:06
中南大学 Java 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
327879次浏览 3082人参与
# 上班苦还是上学苦呢? #
72416次浏览 645人参与
# 百度开奖 #
183292次浏览 1143人参与
# 地方国企笔面经互助 #
4495次浏览 12人参与
# 如果有时光机,你最想去到哪个年纪? #
21663次浏览 400人参与
# 选完offer后,你后悔学本专业吗 #
21854次浏览 159人参与
# 阿里云管培生offer #
36949次浏览 422人参与
# 我的实习求职记录 #
6070162次浏览 83541人参与
# 如何一边实习一边秋招 #
996625次浏览 12664人参与
# 找工作时遇到的神仙HR #
553328次浏览 3801人参与
# 入职第一天,你准备什么时候下班 #
21609次浏览 144人参与
# 招聘要求与实际实习内容不符怎么办 #
10770次浏览 277人参与
# bilibili求职进展汇总 #
33197次浏览 356人参与
# 许愿池 #
214762次浏览 2534人参与
# 学历or实习经历,哪个更重要 #
53863次浏览 422人参与
# 你今年的平均薪资是多少? #
70753次浏览 345人参与
# 实习工作,你找得还顺利吗? #
247736次浏览 2906人参与
# 通信硬件薪资爆料 #
608796次浏览 5169人参与
# 海康威视求职进展汇总 #
400729次浏览 3408人参与
# 携程求职进展汇总 #
135720次浏览 930人参与
# 正在实习的你,几点下班 #
53325次浏览 396人参与
# 工作两年想退休了 #
53095次浏览 672人参与