关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
05-28 14:46
重庆大学 测试工程师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 国企是理工四大天坑的最好选择吗 #
13249次浏览 94人参与
# 如果可以,你希望哪个公司来捞你 #
99120次浏览 409人参与
# leader认为你工作不认真怎么办 #
30006次浏览 132人参与
# 如果公司给你放一天假,你会怎么度过? #
16569次浏览 127人参与
# 三一重工求职进展汇总 #
14545次浏览 66人参与
# 我的国央企投递进展 #
46029次浏览 287人参与
# 机械人,你被简历秒挂的企业有哪些? #
42495次浏览 280人参与
# 通信/硬件公司求职体验 #
123911次浏览 865人参与
# 总结:哪家公司面试体验感最差 #
60653次浏览 276人参与
# 你认为小厂实习有用吗? #
30780次浏览 349人参与
# 我和mentor的爱恨情仇 #
58189次浏览 350人参与
# 哪一瞬间觉得自己长大了 #
14562次浏览 339人参与
# 说说你知道的学历厂 #
62268次浏览 376人参与
# 你找工作的时候用AI吗? #
28175次浏览 346人参与
# 秋招最大的收获是什么? #
37017次浏览 311人参与
# 技术岗笔试题求解 #
78042次浏览 1012人参与
# OPPO求职进展汇总 #
662410次浏览 5036人参与
# 面试尴尬现场 #
46219次浏览 305人参与
# 计算机有哪些岗位值得去? #
22789次浏览 218人参与
# 下班后的时间你怎么安排 #
14135次浏览 193人参与