Boa tarde galera
Não estou entendendo o porque está ocorrendo isso. Estou fazendo um trabalho sobre tabelas hash, e sempre quando chamo a função de busca(busca_hash), o programa retorna -2 que seria quando a tabela está cheia. Se estiver alguma coisa errada no código eu não consigo visualizar isso. Alguém pode me ajudar? Agradeço.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define TAM 15
int opc;
void menu(){
printf("\t******************** TABELAS HASH ********************\n\n");
printf("(1)Inserir novo elemento\n(2)Buscar um elemento\n(3)Visualizar elementos\n\n");
printf("Digite uma opcao: ");
scanf("%d",&opc);
//system("cls");
}
int hash(int x)
{
return x % 15;
}
int insere(int *a, int x, int n){
int i, cont = 0;
i = hash(x);
while(a != -1){
if (a == x){ // POSIÇÃO OCUPADA. return -1; }
if (++cont == n){ return -2; }
if (++i == n){ i = 0; } } a = x; return i; }
int busca_hash(int *a, int x, int n){ int i, cont = 0, compare=0;
i = hash(x);
while(a != x){ compare++;
if(a == -1) return -1;
if(++cont == n) // TABELA CHEIA... return -2;
if(++i == n) i = 0; }
printf("\nNumero de comparacoes realizadas = %d\n", compare); return i; }
int main() { int vet[TAM], num, tam_tabela = TAM, numero,i,x=0; char cont;
do{
menu();
switch(opc) { case 1: printf("\nDigite um numero a ser inserido: "); scanf("%d", &num); insere(vet,num,tam_tabela); x++; break;
case 2: printf("\nQual numero deseja buscar? "); scanf("%d", &numero); printf("\nNumero encontrado na posicao: %d\n", busca_hash(vet,numero,tam_tabela)); break;
case 3: printf("\n"); for (i=0; i<x; i++){ printf("%d ",vet); } printf("\n"); break; }
printf("\nDeseja continuar?(s)sim (n)nao: "); scanf(" %c",&cont); printf("\n\n"); cont = toupper(cont); //system("cls");
}while(cont == 'S');
system("pause"); return 0; }