mirror of
https://github.com/autistic-symposium/master-algorithms-py.git
synced 2025-04-29 20:26:07 -04:00
fix few details, hash table
This commit is contained in:
parent
eeeb3c4e4b
commit
2d9a204f00
Binary file not shown.
1
src/abstract_structures/__init__.py
Normal file
1
src/abstract_structures/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
__all__=["hash_tables", "heap", "linked_list", "queues", "stacks"]
|
@ -1,65 +0,0 @@
|
||||
#!/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()
|
0
src/abstract_structures/hash_tables/__init__.py
Normal file
0
src/abstract_structures/hash_tables/__init__.py
Normal file
61
src/abstract_structures/hash_tables/hash_table.py
Normal file
61
src/abstract_structures/hash_tables/hash_table.py
Normal file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
__author__ = "Mari Wahl"
|
||||
__email__ = "marina.w4hl@gmail.com"
|
||||
|
||||
''' design a Hash table using chaining to avoid collisions.'''
|
||||
|
||||
|
||||
#import abstract_structures.linked_list.linked_list_fifo
|
||||
#import abstract_structures.linked_list.node
|
||||
|
||||
from linked_list_fifo import LinkedListFIFO
|
||||
|
||||
|
||||
|
||||
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(LinkedListFIFO())
|
||||
|
||||
def _find(self, item):
|
||||
return item%self.size
|
||||
|
||||
def _add(self, item):
|
||||
index = self._find(item)
|
||||
self.slots[index].addNode(item)
|
||||
|
||||
def _delete(self, item):
|
||||
index = self._find(item)
|
||||
self.slots[index].deleteNode(item)
|
||||
|
||||
def _print(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._add(i)
|
||||
H1._print()
|
||||
print('\n\nNow deleting:')
|
||||
H1._delete(0)
|
||||
H1._delete(1)
|
||||
H1._delete(2)
|
||||
H1._delete(0)
|
||||
|
||||
H1._print()
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_hash_tables()
|
@ -50,12 +50,6 @@ class LinkedListFIFO(object):
|
||||
self.tail.pointer = node
|
||||
self.tail = node
|
||||
|
||||
# delete a node in some position
|
||||
def _delete(self, prev, node):
|
||||
self.length -= 1
|
||||
prev.pointer = node.pointer
|
||||
if not node.pointer:
|
||||
self.tail = prev
|
||||
|
||||
# add nodes in general
|
||||
def addNode(self, value):
|
||||
@ -81,8 +75,14 @@ class LinkedListFIFO(object):
|
||||
self._deleteFirst()
|
||||
else:
|
||||
node, prev, i = self._find(index)
|
||||
if i == index:
|
||||
self._delete(prev, node)
|
||||
if i == index and node:
|
||||
self.length -= 1
|
||||
if i == 0 or not prev :
|
||||
self.head = node.pointer
|
||||
else:
|
||||
prev.pointer = node.pointer
|
||||
if not self.tail == node:
|
||||
self.tail = prev
|
||||
else:
|
||||
print('Node with index {} not found'.format(index))
|
||||
|
||||
|
@ -1,71 +0,0 @@
|
||||
#!/usr/bin/python3
|
||||
# mari von steinkirch @2013
|
||||
# steinkirch at gmail
|
||||
|
||||
|
||||
|
||||
class Node(object):
|
||||
def __init__(self,data=None,next=None):
|
||||
self.data = data
|
||||
self.next = next
|
||||
|
||||
def setnext(self,next):
|
||||
self.next = next
|
||||
|
||||
def __str__(self):
|
||||
return "%s" % self.data
|
||||
|
||||
|
||||
class LinkedListStack(object):
|
||||
''' linked list from stack '''
|
||||
def __init__(self, max=0):
|
||||
self.max = max
|
||||
self.head = None
|
||||
self.z = None
|
||||
self.size = 0
|
||||
|
||||
def push(self, data):
|
||||
if self.size == 0:
|
||||
self.head = Node(data=data)
|
||||
self.size += 1
|
||||
else:
|
||||
head = self.head
|
||||
temp = Node(data = data)
|
||||
self.head = temp
|
||||
self.head = temp
|
||||
temp.setnext(head)
|
||||
|
||||
def pop(self):
|
||||
temp = self.head.next
|
||||
self.head = temp
|
||||
|
||||
def isEmpty(self):
|
||||
return self.size == 0
|
||||
|
||||
def __str__(self):
|
||||
d = ""
|
||||
if self.isEmpty(): return ""
|
||||
else:
|
||||
temp = self.head
|
||||
d += "%s\n" % temp
|
||||
while temp.next != None:
|
||||
temp = temp.next
|
||||
d += "%s\n" % temp
|
||||
return d
|
||||
|
||||
|
||||
|
||||
|
||||
def test_ll_from_stack():
|
||||
ll = LinkedListStack(max = 20)
|
||||
ll.push("1")
|
||||
ll.push("2")
|
||||
ll.push("3")
|
||||
ll.push("4")
|
||||
print(ll)
|
||||
ll.pop()
|
||||
print(ll)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_ll_from_stack()
|
Loading…
x
Reference in New Issue
Block a user