Ir ao conteúdo
  • Cadastre-se

Johny Macedo

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por Johny Macedo

  1. 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;
    }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!