1+ class HashTable :
2+ def __init__ (self , size ):
3+ self .keys = [None ] * size
4+ self .values = [None ] * size
5+
6+ def put (self , key , value ):
7+ hash = self .hash (key , len (self .keys ))
8+ if self .keys [hash ] == None :
9+ self .keys [hash ] = key
10+ self .values [hash ] = value
11+ elif self .keys [hash ] == key :
12+ self .values [hash ] = value
13+ else :
14+ new_hash = self .rehash (hash , len (self .keys ))
15+ while new_hash != hash and self .keys [new_hash ] != None and self .keys [new_hash ] != key :
16+ new_hash = self .rehash (new_hash , len (self .keys ))
17+ if self .keys [new_hash ] == None :
18+ self .keys [new_hash ] = key
19+ self .values [new_hash ] = value
20+ elif self .keys [new_hash ] == key :
21+ self .values [new_hash ] = value
22+
23+ def get (self , key ):
24+ hash = self .hash (key , len (self .keys ))
25+ if self .keys [hash ] == None :
26+ return None
27+ elif self .keys [hash ] == key :
28+ return self .values [hash ]
29+ else :
30+ new_hash = self .rehash (hash , len (self .keys ))
31+ while new_hash != hash and self .keys [new_hash ] != None and self .keys [new_hash ] != key :
32+ new_hash = self .rehash (new_hash , len (self .keys ))
33+ if self .keys [new_hash ] == None :
34+ return None
35+ elif self .keys [new_hash ] == key :
36+ return self .values [new_hash ]
37+ else :
38+ return None
39+
40+ def delete (self , key ):
41+ ret_value = None
42+ hash = self .hash (key , len (self .keys ))
43+ if self .keys [hash ] == key :
44+ ret_value = self .values [hash ]
45+ self .keys [hash ] = None
46+ self .values [hash ] = None
47+ return ret_value
48+ elif self .keys [hash ] == None :
49+ return ret_value
50+ else :
51+ new_hash = self .rehash (hash , len (self .keys ))
52+ while new_hash != hash and self .keys [new_hash ] != None and self .keys [new_hash ] != key :
53+ new_hash = self .rehash (new_hash , len (self .keys ))
54+ if self .keys [new_hash ] == None :
55+ return ret_value
56+ elif self .keys [new_hash ] == key :
57+ ret_value = self .values [new_hash ]
58+ self .keys [new_hash ] = None
59+ self .values [new_hash ] = None
60+ return ret_value
61+ else :
62+ return ret_value
63+
64+ def size (self ):
65+ count = 0
66+ pos = 0
67+ while pos < len (self .keys ):
68+ if self .keys [pos ] != None :
69+ count += 1
70+ pos += 1
71+ return count
72+
73+ def contains (self , key ):
74+ hash = self .hash (key , len (self .keys ))
75+ if self .keys [hash ] == None :
76+ return False
77+ elif self .keys [hash ] == key :
78+ return True
79+ else :
80+ new_hash = self .rehash (hash , len (self .keys ))
81+ while new_hash != hash and self .keys [new_hash ] != None and self .keys [new_hash ] != key :
82+ new_hash = self .rehash (new_hash , len (self .keys ))
83+ if self .keys [new_hash ] == None :
84+ return False
85+ elif self .keys [new_hash ] == key :
86+ return True
87+ else :
88+ return False
89+
90+ def hash (self , item , size ):
91+ return item % size
92+
93+ def rehash (self , old_hash , size ):
94+ return (old_hash + 1 ) % size
95+
96+ def show (self ):
97+ print (self .keys )
98+ print (self .values )
99+
100+ ht = HashTable (11 )
101+ print ("put ##########################" )
102+ ht .put (11 , "11 - string" )
103+ ht .put (22 , "22 - string" )
104+ ht .put (33 , "33 - string" )
105+ ht .put (44 , "44 - string" )
106+ ht .put (12 , "12 - string" )
107+ ht .put (10 , "10 - string" )
108+
109+ print ("size #########################" , ht .size ())
110+ print ("contains #########################" , ht .contains (33 ))
111+
112+ print ("get ##########################" )
113+ print (ht .get (22 ), ht .get (33 ), ht .get (117 ))
114+
115+ ht .show ()
116+
117+ print ("delete ##########################" )
118+ print (ht .delete (33 ), ht .delete (15 ))
119+ print (ht .get (22 ), ht .get (33 ), ht .get (117 ))
120+ print ("size #########################" , ht .size ())
121+ print ("contains #########################" , ht .contains (33 ))
122+ ht .show ()
0 commit comments