(6)SkipList原理与实现

简介

这种数据结构是William Pugh于1990年在在 Communications of the ACMJune 1990, 33(6) 668-676 发表了Skip lists: a probabilistic alternative to balanced trees,论文标题可知,SkipList设计初衷是替换平衡树

(1)AVL查询效率严格O(logN),插入需多次旋转,导致插入效率较低,才有更实用红黑树

(2)红黑树并发环境不方便,更新数据时,Skip更新较少,锁的也少,而红黑树有平衡的过程(涉及到较多节点),锁住更多节点,降低并发性

(3)SkipList优势实现简单,红黑树2天,SkipList2个小时实现。

用途:Redis, 还有Google的著名项目Bigtable    

概要:查找、插入、移除

一、查找

在普通单向链表加索引(分层),快速查

找key为19,索引到9,9 < 19,继续查找到21这个节点,21 > 19, level由2降低到1

17这个节点,17 < 19, 继续往后,21这个结点,发现21>19, level由1降低到0

在结点17上,level==0索引到19,查找完毕。

1、整体:

2、Node定义:

3、参数

4、查找代码

二、插入

从所有小于待插入节点key值的节点中,找出最大

插入17,查到12,12 < 17,19 > 17,满足条件

创建新结点,在1~MAX_LEVEL之间随机level值作为该结点的level

三、移除

查找到指定结点,没找到则返回

调整指针指向

释放结点空间

完整代码https://github.com/HiWong/SkipListPro

https://blog.csdn.net/tjtulong/article/details/106138945

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容