mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 20:26:07 -04:00
66 lines
1.4 KiB
Python
66 lines
1.4 KiB
Python
#!/usr/bin/python3
|
|
# mari von steinkirch @2013
|
|
# steinkirch at gmail
|
|
|
|
''' The first example design a Hash table using chaining to avoid collisions. The second
|
|
uses two lists.'''
|
|
|
|
from linked_list_fifo import Node, LinkList
|
|
|
|
class HashTableLL(object):
|
|
def __init__(self, size):
|
|
self.size = size
|
|
self.slots = []
|
|
self._createHashTable()
|
|
|
|
def _createHashTable(self):
|
|
for i in range(self.size) :
|
|
self.slots.append(LinkList())
|
|
|
|
def findIndex(self, item):
|
|
return item%self.size
|
|
|
|
def addItem(self, item):
|
|
index = self.findIndex(item)
|
|
self.slots[index].addNode(item)
|
|
return self
|
|
|
|
|
|
def delItem(self, item):
|
|
index = self.findIndex(item)
|
|
self.slots[index].deleteNode(item)
|
|
return self
|
|
|
|
|
|
def printHashTable(self):
|
|
for i in range(self.size):
|
|
print('\nSlot {}:'.format(i))
|
|
print(self.slots[i].printList())
|
|
|
|
|
|
|
|
|
|
|
|
def test_hash_tables():
|
|
H1 = HashTableLL(3)
|
|
for i in range (0, 20):
|
|
H1.addItem(i)
|
|
H1.printHashTable()
|
|
print('\n\nNow deleting:')
|
|
H1.delItem(0)
|
|
H1.delItem(0)
|
|
H1.delItem(0)
|
|
H1.delItem(0)
|
|
H1.printHashTable()
|
|
'''
|
|
H2 = HashTable2L(3)
|
|
H2[54]="buffy"
|
|
H2[26]="xander"
|
|
H2[17]="giles"
|
|
print(H.2slots)
|
|
'''
|
|
|
|
|
|
if __name__ == '__main__':
|
|
test_hash_tables()
|