Skip to content

Instantly share code, notes, and snippets.

@cyyeh
Created March 20, 2017 11:53
Show Gist options
  • Select an option

  • Save cyyeh/ebc7516f87f0e32e410dae49afdb299c to your computer and use it in GitHub Desktop.

Select an option

Save cyyeh/ebc7516f87f0e32e410dae49afdb299c to your computer and use it in GitHub Desktop.
class HashTable:
def __init__(self):
self.size = 11
self.slots= [None] * self.size
self.data = [None] * self.size
def put(self, key, data):
hashvalue = self.hashfunction(key, len(self.slots))
if self.slots[hashvalue] == None:
self.slots[hashvalue] = key
self.data[hashvalue] = data
else:
if self.slots[hashvalue] == key:
self.data[hashvalue] = data # replace
else:
nextslot = self.rehash(hashvalue, len(self.slots))
while self.slots[nextslot] != None and self.slots[nextslot] != key:
nextslot = self.rehash(nextslot, len(self.slots))
if self.slots[nextslot] == None:
self.slots[nextslot] = key
self.data[nextslot] = data
else:
self.data[nextslot] = data # replace
def hashfunction(self, key, size):
return key % size
def rehash(self, oldhash, size):
return (oldhash + 1) % size
def get(self, key):
startslot = self.hashfunction(key, len(self.slots))
data = None
stop = False
found = False
position = startslot
while self.slots[position] != None and not found and not stop:
if self.slots[position] == key:
found = True
data = self.slots[position]
else:
position = self.rehash(position, len(self.slots))
if position == startslot:
stop = True
return data
def __getitem__(self, key):
return self.get(key)
def __setitem__(self, key, data):
self.put(key, data)
def main():
H = HashTable()
H[54] = "cat"
H[26] = "dog"
H[93] = "lion"
print(H.slots)
print(H.data)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment