Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Johny Macedo

C Solução - trabalho sobre tabelas hash

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×