Professor: Marco Dimas Gubitoso
Grupo: Bento Pereira, Daniela Favero e Pedro Gigeck.
A entrada para testar esse módulo é:
- Tamanho da hash table
- Tamanho da lista ligada (quantos elementos serão inseridos)
- O nome de cada elemento a ser inserido
- Quantos elementos se deseja buscar
- O nome de cada elemento a ser buscando
- O nome de um elemento a ser retirado
- O nome do elemento que foi retirado, para fazer uma busca
O módulo retorna:
- O hash de cada elemento inserido
- O nome do(s) elemento(s) buscado(s), seu hash e se foi encontrado ou não
- O nome do elemento a ser retirado
- Resultado da busca pel elemento retirado
- Vários prints confirmando os "free" da lista
Há um módulo *entrada.txt* com uma entrada que testa bem os módulos.
## Detalhes da implementação
### Elemento
Por enquanto a struct só contém o nome, mas já temos uma prévia comentada de como será.
### Lista
Listas ligadas implementadas com structs de elos que apontam para o próximo elo e guardam o ponteiro para um elemento. A estrutura lista em si é só um ponteiro para um elo chamado cabec (topo), que inicia nulo e representa o primeiro elemento da lista. As demais funções foram implementadas e estão comentadas no código mais detalhadamente, mas em sua maioria giram em torno do fato da lista ligada ter o último ponteiro que aponta para elos sendo sempre nulo.
### Hash
A tabela de hash funciona transformando a palavra em um número na base 257 e tirando o seu módulo pelo tamanho da tabela e o colocando numa lista ligada correspondente ao valor encontrado. Exemplo: A N O retornará (O * 257⁰ + N * 257¹ + A * 257²) mod(mod) Para as outras funções, utilizamos as funções de *lista.h*, executando elas baseando-se no hash do elemento de interessa.