Neste laboratório, vamos implementar uma tabela de dispersão (ou hash) com a mesma interface mapa.h de sempre.
O esqueleto de implementação usa as seguintes estruturas para representar a tabela:
typedef struct { int chave; int dados; int prox; } ttabpos; struct smapa { int tam; int ocupadas; ttabpos *tabpos; };
Ou seja, o Mapa é uma struct contendo um campo com o tamanho inicial, o número de entradas ocupadas e um ponteiro para a tabela propriamente dita. Sua implementação deve tratar conflitos através de encadeamento interno, de maneira semelhante ao que foi exposto em sala (esboçado nesses slides).
Cada posição da tabela contém, além da chave e dos dados, um campo prox, apontando para o índice da tabela contendo a próxima chave mapeada para o mesmo valor de hash que a chave na posição atual. Se não houver essa "próxima" chave, o campo prox deve conter o valor -1. Posições livres na tabela possuem o campo chave também igual a -1.
Pegue o arquivo mapa.c que tem um esboço da implementação, e o arquivo de teste em teste.c.
Para ""liberar" a compilação da função redimensiona, remova
do arquivo mapa.c as linhas
#if 0
#endif
obs: Nesse laboratório não é necessário copiar os testes realizados para a área de comentários. Basta entregar o arquivo mapa.c e, caso tenha alterado os testes, entregue também seu arquivo teste.c.