残雪余香

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  69 随笔 :: 1 文章 :: 57 评论 :: 0 引用

1、定义描述
     跳跃列表(也称跳表)是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。
     基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。所有操作都以对数随机化的时间进行。
     
     跳表是按层构造的,最底层是一个全量的有序链表,上层可以说是下层的“快速跑道”。常用于链表元素非常多的场景,查询、删除和插入操作都会是一种负担。
     目前,开源软件Redis和 LevelDB都有用跳表这种数据结构,采用空间换时间的思路提高对链表的基本操作。在 Java 的 JUC 库里有实现好的ConcurrentSkipListMap和ConcurrentSkipListSet,可以应用在自己的项目中。
 
2、跳表具有如下性质
如下图,为一个跳表数据模型样例
(1)由很多层结构组成
(2)每一层都是一个有序的链表
(3)最底层(Level 1)的链表包含所有元素
(4)如果一个元素出现在 Level i 的链表中,则它在 Level i 之下的链表也都会出现。
(5)每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。
 
3、相关操作
(1)查找
例如:查找117