之前看随机化的平衡树时看到了跳表这种数据结构,在网上查了些资料,自己实现了一下,确实比各种平衡树好写多了,并且效率也不低。
跳表这种数据结构其实就是对链表的扩展,采用多层链表的形式,每高一层节点数量大约减少1/2。
例如:
1-------------->5----------------->null
1----->3------>5----->7-------->null
1->2->3->4->5->6->7->8--->null
这样我们在查找某个节点时就可以从高层开始查找,一旦该层到末尾,或下一个值大于查找值,我们就跳到下一层。
比如我们要查找6:
(1)首先跳到第三层的第一个节点1.
(2)节点1的下一个节点5小于6,跳到该点。
(3)节点5下一个节点为空,调到第二层。
(4)第二层的节点5下一个节点7大于6,跳第一层.
(5)第一层下一个节点为6,ok找到目标。
1.代码
我用python简单的写了一下,本来还想研究一下怎么找第k大的,然而没看到相关的资料,之后再补充把。
(1)节点类
import random
class node(object):
def __init__(self,val,level):
self.val &#