关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
牛客78099800...:实习现在还不捞26届的啊,我投了很多,没有进流程的,以为是在搞秋招,但意外发现大三的不少都面实习了 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 对2025年忏悔 #
942次浏览 18人参与
# 联影求职进展汇总 #
164974次浏览 831人参与
# 实习没人带,苟住还是跑路? #
5895次浏览 146人参与
# 非技术岗简历怎么写 #
274566次浏览 3167人参与
# 元旦假期你打算怎么过 #
4143次浏览 115人参与
# 春招前还要继续实习吗? #
1204次浏览 25人参与
# 你做过哪些dirty work #
24925次浏览 155人参与
# 妈妈治愈了你哪些脆皮时刻 #
38305次浏览 338人参与
# 面试官问过你最刁钻的问题是什么? #
2974次浏览 51人参与
# 毕业论文怎么查AI率 #
69993次浏览 1938人参与
# 大家实习都在做什么? #
5170次浏览 54人参与
# 运营面经 #
148815次浏览 1329人参与
# 一人说一家双休的公司 #
2978次浏览 51人参与
# 我来点评面试官 #
37527次浏览 163人参与
# 我们是不是被“优绩主义”绑架了? #
5904次浏览 211人参与
# 实习/项目/竞赛奖项,哪个对找工作更重要? #
102427次浏览 1185人参与
# 牛客2025仙途报告 #
27274次浏览 369人参与
# 职场中对你有帮助的书 #
25606次浏览 216人参与
# 查收我的offer竞争力报告 #
264174次浏览 1649人参与
# 应届生初入职场,求建议 #
286147次浏览 2851人参与

查看6道真题和解析