Skip to content

Commit cf77375

Browse files
Add files via upload
1 parent 9c027ce commit cf77375

File tree

2 files changed

+228
-0
lines changed

2 files changed

+228
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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+
else:
12+
self.keys[hash] = self.keys[hash] + [key]
13+
self.values[hash] =self.values[hash] + [value]
14+
15+
def get(self, key):
16+
hash = self.hash(key, len(self.keys))
17+
if self.keys[hash] == None:
18+
return None
19+
else:
20+
ret_value = None
21+
found = False
22+
pos = 0
23+
while pos < len(self.keys[hash]) and not found:
24+
if self.keys[hash][pos] == key:
25+
ret_value = self.values[hash][pos]
26+
found = True
27+
else:
28+
pos += 1
29+
return ret_value
30+
31+
32+
def delete(self, key):
33+
ret_value = None
34+
hash = self.hash(key, len(self.keys))
35+
if self.keys[hash] == None:
36+
return ret_value
37+
else:
38+
found = False
39+
pos = 0
40+
while pos < len(self.keys[hash]) and not found:
41+
if self.keys[hash][pos] == key:
42+
found = True
43+
else:
44+
pos += 1
45+
if found:
46+
ret_value = self.values[hash][pos]
47+
self.keys[hash].pop(pos)
48+
self.values[hash].pop(pos)
49+
return ret_value
50+
51+
def size(self):
52+
count = 0
53+
pos = 0
54+
while pos < len(self.keys):
55+
if self.keys[pos] != None:
56+
count += len(self.keys[pos])
57+
pos += 1
58+
return count
59+
60+
def contains(self, key):
61+
hash = self.hash(key, len(self.keys))
62+
if self.keys[hash] == None:
63+
return False
64+
else:
65+
found = False
66+
pos = 0
67+
while pos < len(self.keys[hash]) and not found:
68+
if self.keys[hash][pos] == key:
69+
found = True
70+
else:
71+
pos += 1
72+
if found:
73+
return True
74+
else:
75+
return False
76+
77+
def hash(self, item, size):
78+
return item % size
79+
80+
def show(self):
81+
print(self.keys)
82+
print(self.values)
83+
84+
ht = HashTable(11)
85+
print("put ##########################")
86+
ht.put(11, "11 - string")
87+
ht.put(22, "22 - string")
88+
ht.put(33, "33 - string")
89+
ht.put(44, "44 - string")
90+
ht.put(12, "12 - string")
91+
ht.put(10, "10 - string")
92+
93+
print("size #########################", ht.size())
94+
print("contains #########################", ht.contains(33))
95+
96+
print("get ##########################")
97+
print(ht.get(22), ht.get(33), ht.get(117))
98+
99+
ht.show()
100+
101+
print("delete ##########################")
102+
print(ht.delete(33), ht.delete(15))
103+
print(ht.get(22), ht.get(33), ht.get(117))
104+
print("size #########################", ht.size())
105+
print("contains #########################", ht.contains(33))
106+
ht.show()
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
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

Comments
 (0)