Skip to content

Commit f24ae20

Browse files
author
Mateus Camargo
committed
Adicionando estrutura de HashTable
1 parent 5fa82c7 commit f24ae20

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

src/python/hash_table.py

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
"""
2+
Implementação de uma hashtable
3+
"""
4+
5+
import traceback
6+
7+
8+
class HashTable:
9+
10+
def __init__(self, size=10):
11+
self.size = size
12+
self.tables = [[] for _ in range(self.size)]
13+
14+
def hashing(self, key):
15+
return hash(key) % self.size
16+
17+
def __setitem__(self, key, value):
18+
hash_key = self.hashing(key)
19+
bucket = self.tables[hash_key]
20+
if bucket:
21+
for index, k_value in enumerate(bucket):
22+
k, v = k_value
23+
if key == k:
24+
bucket[index] = key, value
25+
return
26+
bucket.append((key, value))
27+
28+
def __getitem__(self, key):
29+
hash_key = self.hashing(key)
30+
bucket = self.tables[hash_key]
31+
if bucket:
32+
for index, item in enumerate(bucket):
33+
k, value = item
34+
if key == k:
35+
return value
36+
raise KeyError(key)
37+
38+
def __delitem__(self, key):
39+
hash_key = self.hashing(key)
40+
bucket = self.tables[hash_key]
41+
if bucket:
42+
for index, item in enumerate(bucket):
43+
k, value = item
44+
if key == k:
45+
del bucket[index]
46+
return
47+
raise KeyError(key)
48+
49+
50+
if __name__ == '__main__':
51+
52+
# Cria as tabelas de dispersão
53+
hash_table = HashTable()
54+
55+
# Insere as chaves e valores
56+
for i in range(143):
57+
hash_table[i] = hex(round(i * 23))
58+
59+
# Deletar item
60+
print("Deletar chave 0 de valor: ", hash_table[0])
61+
del hash_table[0]
62+
63+
# Procurar item
64+
print('Valor da chave 23: ', hash_table[23])
65+
66+
# Subscrever um valor de uma chave
67+
hash_table[1] = 'TESTE DE SUBSCREVER'
68+
69+
# Exibir dispersão
70+
for i, table in enumerate(hash_table.tables):
71+
print("Table {index} -> {table} Len -> {len}".
72+
format(index=i + 1,
73+
table=table,
74+
len=len(table)))
75+
76+
# Tentar deletar uma chave que não existe
77+
try:
78+
del hash_table[493084]
79+
except KeyError:
80+
print(traceback.print_exc())
81+
82+
# Tentar acessar uma chave que não existe
83+
try:
84+
print(hash_table[493084])
85+
except KeyError:
86+
print(traceback.print_exc())

0 commit comments

Comments
 (0)