3
3
https://epaperpress.com/sortsearch/download/skiplist.pdf
4
4
"""
5
5
6
- from typing import List , Tuple , Optional , TypeVar , Generic
7
6
from random import random
7
+ from typing import Generic , List , Optional , Tuple , TypeVar
8
8
9
9
KT = TypeVar ("KT" )
10
10
VT = TypeVar ("VT" )
@@ -16,7 +16,7 @@ def __init__(self, key: KT, value: VT):
16
16
self .value = value
17
17
self .forward : List [Node [KT , VT ]] = []
18
18
19
- def __repr__ (self ):
19
+ def __repr__ (self ) -> str :
20
20
"""
21
21
:return: Visual representation of Node
22
22
@@ -48,12 +48,12 @@ def level(self) -> int:
48
48
49
49
class SkipList (Generic [KT , VT ]):
50
50
def __init__ (self , p : float = 0.5 , max_level : int = 16 ):
51
- self .head : Node = Node ("root" , None )
52
- self .level : int = 0
51
+ self .head = Node ("root" , None )
52
+ self .level = 0
53
53
self .p = p
54
54
self .max_level = max_level
55
55
56
- def __str__ (self ):
56
+ def __str__ (self ) -> str :
57
57
"""
58
58
:return: Visual representation of SkipList
59
59
@@ -62,15 +62,17 @@ def __str__(self):
62
62
SkipList(level=0)
63
63
>>> skip_list.insert("Key1", "Value")
64
64
>>> print(skip_list) # doctest: +ELLIPSIS
65
- SkipList...
66
- [root]...
67
- [Key1]...
65
+ SkipList(level=...
66
+ [root]--...
67
+ [Key1]--Key1...
68
+ None *...
68
69
>>> skip_list.insert("Key2", "OtherValue")
69
70
>>> print(skip_list) # doctest: +ELLIPSIS
70
- SkipList...
71
- [root]...
72
- [Key1]...
73
- [Key2]...
71
+ SkipList(level=...
72
+ [root]--...
73
+ [Key1]--Key1...
74
+ [Key2]--Key2...
75
+ None *...
74
76
"""
75
77
76
78
items = list (self )
@@ -91,11 +93,12 @@ def __str__(self):
91
93
while len (node .forward ) != 0 :
92
94
node = node .forward [0 ]
93
95
94
- lines .append (f"[{ node .key } ]" .ljust (label_size , "-" ) + " " .join (
95
- str (n .key ) if n .key == node .key else "|"
96
- for n in forwards ))
96
+ lines .append (
97
+ f"[{ node .key } ]" .ljust (label_size , "-" )
98
+ + " " .join (str (n .key ) if n .key == node .key else "|" for n in forwards )
99
+ )
97
100
lines .append (" " * label_size + "| " * len (forwards ))
98
- forwards [:node .level ] = node .forward
101
+ forwards [: node .level ] = node .forward
99
102
100
103
lines .append ("None" .ljust (label_size ) + "* " * len (forwards ))
101
104
return f"SkipList(level={ self .level } )\n " + "\n " .join (lines )
@@ -423,18 +426,18 @@ def main():
423
426
>>> pytests()
424
427
"""
425
428
426
- lst = SkipList ()
427
- lst .insert (2 , "2" )
428
- lst .insert (4 , "4" )
429
- lst .insert (6 , "4" )
430
- lst .insert (4 , "5" )
431
- lst .insert (8 , "4" )
432
- lst .insert (9 , "4" )
429
+ skip_list = SkipList ()
430
+ skip_list .insert (2 , "2" )
431
+ skip_list .insert (4 , "4" )
432
+ skip_list .insert (6 , "4" )
433
+ skip_list .insert (4 , "5" )
434
+ skip_list .insert (8 , "4" )
435
+ skip_list .insert (9 , "4" )
433
436
434
- lst .delete (4 )
437
+ skip_list .delete (4 )
435
438
436
- print (lst )
439
+ print (skip_list )
437
440
438
441
439
- if __name__ == ' __main__' :
442
+ if __name__ == " __main__" :
440
443
main ()
0 commit comments