Skip to content

Commit 81d31bb

Browse files
committed
Add py hash table with chaining
1 parent 42f1bc9 commit 81d31bb

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'''
2+
CLRS Section 11.2, p. 258
3+
'''
4+
5+
from .p238_linked_list import LinkedList
6+
7+
class HashTableChaining:
8+
def __init__(self, m=0):
9+
self.m = m
10+
self.T = [LinkedList() for element in range(0, m + 1)]
11+
12+
def h(self, k):
13+
return k % self.m # cf. Exercise 11.2-2, p. 261
14+
15+
def chained_hash_insert(self, x):
16+
self.T[self.h(x.key)].list_insert(x)
17+
18+
def chained_hash_search(self, k):
19+
return self.T[self.h(k)].list_search(k)
20+
21+
def chained_hash_delete(self, x):
22+
self.T[self.h(x.key)].list_delete(x)

python/main.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,3 +291,45 @@
291291
, L.nil.next.next.next.next.key, '->'
292292
, L.nil.next.next.next.next.next.key
293293
)
294+
295+
# CLRS Section 11.2 - Hash Table with Chaining
296+
from data_structures.p258_hash_table_chaining import HashTableChaining
297+
298+
print('\nSection 11.2 - Hash Table with Chaining')
299+
300+
T = HashTableChaining(9) # cf. Exercise 11.2-2, p. 261
301+
T.chained_hash_insert(ListNode(5))
302+
T.chained_hash_insert(ListNode(28))
303+
T.chained_hash_insert(ListNode(19))
304+
T.chained_hash_insert(ListNode(15))
305+
T.chained_hash_insert(ListNode(20))
306+
T.chained_hash_insert(ListNode(33))
307+
T.chained_hash_insert(ListNode(12))
308+
T.chained_hash_insert(ListNode(17))
309+
T.chained_hash_insert(ListNode(10))
310+
print('\nafter chained_hash_insert\'s:')
311+
for i in range(0, len(T.T)):
312+
if T.T[i].head is None:
313+
print(f'{i}: {T.T[i].head}')
314+
else:
315+
str = f'{i}: '
316+
pointer = T.T[i].head
317+
while(pointer is not None):
318+
str += f'{pointer.key} -> '
319+
pointer = pointer.next
320+
str += 'None'
321+
print(str)
322+
delete_node = T.chained_hash_search(19)
323+
T.chained_hash_delete(delete_node)
324+
print('after chained_hash_delete(19):')
325+
for i in range(0, len(T.T)):
326+
if T.T[i].head is None:
327+
print(f'{i}: {T.T[i].head}')
328+
else:
329+
str = f'{i}: '
330+
pointer = T.T[i].head
331+
while(pointer is not None):
332+
str += f'{pointer.key} -> '
333+
pointer = pointer.next
334+
str += 'None'
335+
print(str)

0 commit comments

Comments
 (0)