skiplist 跳跃表
什么是跳跃表? SkipList在leveldb、redis以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表? 跳跃表的理解 这里元素不多,体现不出优势,如果元素足够多,这种索引结构就能体现出优势来了。 璺宠〃 其中 -1 表示 INT_MIN, 链表的最小值,1 表示 INT_MAX,链表的最大值。 跳表具有如下性质: (1) 由很多层结构组成 (2) 每一层都是一个有序的链表 (3) 最底层(Level 1)的链表包含所有元素 (4) 如果一个元素出现在 Level i 的链表中,则它在 Level i 之下的链表也都会出现。 (5) 每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。 例子:查找元素 117 (1) 比较 21, 比 21 大,往后面找 (2) 比较 37, 比 37大,比链表最大值小,从 37 的下面一层开始找 (3) 比较 71, 比 71 大,比链表最大值小,从 71 的下面一层开始找 (4) 比较 85, 比 85 大,从后面找 (5) 比较 117, 等于 117, 找到了节点。 具体的搜索算法如下: /* 如果存在 x, 返回 x 所在的节点, * 否则返回 x