关注
Q2:
我们都知道Redis里的跳表是一种平衡树的不错的替代数据结构,你可以讲一下跳表的结构,然后大概讲一下level中的前进指针的跨度是怎样生成的吧?
A:
跳表是使用类似于双向链表的结构,可以通过多个zskipListNode直接组成,也可以添加zSkipList表头后形成。首先就是同样的`header`、 `Tail`头尾指针(其中header指向的是一个表头),然后不一样的地方在于增加了`level`、`length`两个属性,一个是结点的个数,另外一个是最高的层数。然后结点的结构呢,也有几个属性(`score, object, level[], backward`)其中level数组中是不同级别,不同级别中分别对应不同的前进指针和跨度。
这里说的跨度就是前进指针的移动距离,它的生成规则也比较简单,假设最开始的时候,跳表是空的,这个时候新添加一个跳表节点,首先会随机生成一个1~32之间的数作为这个节点的层高度,然后从表头出发,用前进指针指向表尾,期间经过的节点进行连接,比如说有两个节点,都有L5,但是中间隔了两个点(高度均小于5),那么遍历后的结果就是第一个节点的第5层的前进指针的跨度是2.。跨度除了用来进行遍历,还可以用来**计算目标结点的排位**
查看原帖
点赞 评论
相关推荐
03-20 14:30
北京邮电大学 管理咨询 点赞 评论 收藏
分享
01-30 14:23
浙江工业大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 腾讯音乐求职进展汇总 #
57239次浏览 343人参与
# 你的秋招第一面感觉怎么样 #
61503次浏览 500人参与
# 牛友故事会 #
317740次浏览 8618人参与
# 互联网公司评价 #
348971次浏览 3633人参与
# 互联网回暖,腾讯要招5000+人! #
259126次浏览 4875人参与
# 怎么防止在试用期被辞退 #
110321次浏览 849人参与
# 秋招投简历越早越好吗 #
61094次浏览 605人参与
# 百度工作体验 #
188420次浏览 1845人参与
# 国企vs私企,怎么选? #
18190次浏览 157人参与
# 我在牛爱网找对象 #
161557次浏览 1224人参与
# 盲审过后你想做什么? #
9754次浏览 93人参与
# 面试等了一周没回复,还有戏吗 #
101338次浏览 938人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
89806次浏览 670人参与
# 聊聊这家公司值得去吗 #
195545次浏览 2061人参与
# 职业发展规划如何回答 #
29652次浏览 167人参与
# 没有实习经历还能找到好工作吗? #
6857次浏览 38人参与
# 25届网易互娱暑实进度 #
63028次浏览 603人参与
# 你认为工作的意义是什么 #
120183次浏览 909人参与
# 实习要如何选择和准备? #
20280次浏览 374人参与
# 你的办公桌上都有什么? #
3634次浏览 29人参与