// TABLA HASH CON LISTAS LIGADAS EN COLISIONES #include <stdio.h> #include <stdlib.h> #include <string.h> char nombres[25][50] = {"Juan","José Luis","José","María Guadalupe","Francisco", "Guadalupe","María","Juana","Antonio","Jesús","Miguel Ángel", "Pedro","Alejandro","Manuel","Margarita","María del Carmen", "Juan Carlos","Roberto","Fernando","Daniel","Carlos","Jorge", "Ricardo","Miguel"}; struct Nodo { char *Nombre; struct Nodo *sig; }; struct Nodo *Tabla[24]; int sumaascii(char *cad) { int suma = 0; while ( cad[0] ) { suma += cad[0]; cad++; } return suma; } int F_HASH(int Ascii) { return Ascii%24; } void Almacena(int F_H, char *Nombre) { struct Nodo *aux, *new = (struct Nodo*)malloc(sizeof(struct Nodo)); new->Nombre = (char*)malloc(sizeof(char)*50); strcpy(new->Nombre, Nombre); new->sig = NULL; if ( !Tabla[F_H] ) Tabla[F_H] = new; else { aux = Tabla[F_H]; while (aux->sig) aux = aux->sig; aux->sig = new; } } void inicio() { int x=0, sm=0, F_H=0; while (x<24) { Tabla[x] = NULL; x++; } x=0; while(x<24) { sm = sumaascii(nombres[x]); F_H = F_HASH(sm); printf("%i.- %s==>%i==>%i\n", (x+1), nombres[x], sm, F_H); Almacena(F_H, nombres[x]); x++; } } void Print_Tabla() { int x=0; struct Nodo *nodo = NULL; printf("======================================\n"); printf("____________TABLA HASH________________\n"); printf("======================================\n"); while(x<24) { nodo = Tabla[x]; printf("%i.- ", x); while(nodo) { printf("%s\t", nodo->Nombre); nodo = nodo->sig; } printf("\n"); x++; } } int main() { inicio(); Print_Tabla(); }