2014-08-26 21:12:57 -04:00

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()