关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
02-25 16:17
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# AI面会问哪些问题? #
17202次浏览 351人参与
# 找AI工作可以去哪些公司? #
4838次浏览 117人参与
# 厦门银行科技岗值不值得投 #
6074次浏览 131人参与
# 你的实习产出是真实的还是包装的? #
15483次浏览 250人参与
# 从事AI岗需要掌握哪些技术栈? #
4933次浏览 156人参与
# 春招至今,你的战绩如何? #
49042次浏览 438人参与
# 米连集团26产品管培生项目 #
12310次浏览 283人参与
# 你做过最难的笔试是哪家公司 #
20362次浏览 131人参与
# 聊聊这家公司值得去吗 #
914000次浏览 4736人参与
# 一张图晒出你司的标语 #
2710次浏览 49人参与
# 长得好看会提高面试通过率吗? #
19054次浏览 209人参与
# AI时代,哪个岗位还有“活路” #
8595次浏览 260人参与
# 沪漂/北漂你觉得哪个更苦? #
7524次浏览 132人参与
# HR最不可信的一句话是__ #
4359次浏览 86人参与
# 阿里笔试 #
169871次浏览 1222人参与
# 春招你拿到offer了吗 #
824518次浏览 9959人参与
# 快手年终开大包 #
13174次浏览 101人参与
# 实习的你做了哪些离谱的工作 #
38650次浏览 253人参与
# 学历对求职的影响 #
658284次浏览 4218人参与
# 一人说一家双休的公司 #
69288次浏览 384人参与
# 你的秋招白月光和意难平公司 #
93114次浏览 343人参与
# 工作压力大,你会干什么? #
69014次浏览 698人参与
查看9道真题和解析