数据结构学习笔记 - 跳表

跳表(Skip List)

简介

基于链表稍加改造的一种各方面性能都比较优秀的动态数据结构, 可支持快速插入, 删除, 查找操作, 甚至可以代替红黑树
基于原链表每两个结点向上一级抽索引, 构建出一级索引层, 可构建多级索引, 这种链表加多级索引的结构, 就是跳表
redis中的有序集合(sorted set)就是采用跳表实现

跳表中查询任意数据的时间复杂度都是O(logn), 但空间复杂度O(n), 每三到五个元素抽一个索引可以减少索引存储空间占用
但实际开发中不必太在意索引占用的额外空间, 因为当原始链表中存储的为对象时, 索引中存储的指针和对象相比, 占用空间可以忽略

插入删除

跳表还支持动态的插入和删除操作, 时间复杂度也是O(logn)
但插入元素同时, 需要维护索引的平衡, 采用随机函数的方式, 将此结点同时插入到第一层到第k层索引中
删除操作, 同样需要删除掉索引中的结点

代码实现 (todo)

小结

跳表采用空间换时间的设计思路, 通过多级索引提高查询效率, 实现了基于链表的二分查找
跳表虽然本身不简单, 但相对红黑树的实现还是简单不少, 有时为了代码简单易读, 相比红黑树会使用跳表
跳表更加灵活, 通过改变索引构建策略, 可以有效平衡执行效率和内存消耗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值