import random
class Node(object):
def __init__(self, data):
self.data = data
self.right = None
class SkipList(object):
def __init__(self):
self.header = None
def is_null(self):
if self.header:
return False
else:
return True
def skip_insert(self,data):
node = Node(data)
# 如果是第一个节点
if self.is_null():
node.right = self.header
self.header = node
# 如果不是第一个节点
else:
header_t = self.header
while header_t.right:
# 头部后面的第一个节点
t1 = header_t.right
if t1.data < data:
# 如果此节点后面没有节点
if t1.right is None:
t1.right = node
return
# 如果此节点后面还有节点
else:
header_t = t1
elif t1.data == data:
return
else:
if header_t.data > data:
node.right = header_t
self.header = node
return
elif header_t.data == data:
return
else:
header_t.right = node
node.right = t1
return
# 如果插入的大于第一个数据
if data > header_t.data:
header_t.right = node
return
if data == header_t.data:
return
else:
node.right = header_t
# 将开头设置为第二个节点
self.header = node
return
def skip_search(self, data):
t = self.header
while t.right:
# print("我是search")
print(t.data)
if t.data == data:
print(data)
t = t.right
if t.data == data:
print(t.data)
if __name__ == '__main__':
skip = SkipList()
for i in range(30):
rand = random.randint(1,1000)
skip.skip_insert(rand)
skip.skip_search(0)
12-28
622
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
05-19
679
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-07
1015
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-30
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交