Função de hash simples em C
Publicado por Ewerton Daniel de Lima (última atualização em 22/03/2010)
[ Hits: 36.406 ]
Exemplo de função de hash em C.
O tipo de entrada é String e o tamanho da tabela hash pode ser definido pelo usuário.
Mais adiante pretendo enviar uma versão com tratamento de colisão.
#include <stdio.h> #include <string.h> int tamanhoTabela = 10; /*Rotina que transforma uma string em um número que será usado depois na função hash */ int stringParaInt(char *string) { int tamanho, primeira, segunda; //Inteiros que representam o tamanho, //o código da primeira letra da string //e o código da segunda letra. tamanho = strlen(string); //Mede o tamanho da string primeira = string[0]; //Obtém o código da primeira letra segunda = string[1]; //Obtém o código da segunda letra int resultado = (tamanho * primeira) + segunda; //Função de transformação return resultado; //Retorna número que representa a string } /*A função mais simples de hash; Para uma tabela com n posições (n == tamanhoTabela) Toma-se o módulo n do valor inteiro gerado na função "stringParaInt" Retornará um número entre 0 e 19. */ int hash(int valor) { return valor % tamanhoTabela; } /*Rotina principal Captura strings quaisquer e gera a chave correspondente para tabela hash. */ int main() { int i; char dado[50]; printf("\nDefina o tamanho da tabela: "); scanf("%d", &tamanhoTabela); for (i=0; i<tamanhoTabela; i++) { printf("\nDigite uma palavra qualquer: "); gets(dado); printf("A chave para a tabela (de 0 a %d) é: %d", tamanhoTabela-1, hash(stringParaInt(dado))); } }
Retorna o número elevado ao quadrado
2 Programinhas em C para conversão de bases
clean.h - Biblioteca para limpar um determinado espaço no terminal
Agora temos uma assistente virtual no fórum!!! (247)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Microfone do meu headset não é recinhecido. Meu notebook é um Acer Asp... (9)
redirecionando saida de comando touch para o AWK[AJUDA] (6)
Como configuro meu controle de xbox no mupen64? (7)