Tabla hash en C: ejercicio resuelto con encadenamiento

Tabla hash en C: ejercicio resuelto con encadenamiento

Este ejercicio está programado para publicación diaria y mantiene la misma estructura didáctica del resto del sitio: enunciado claro, código compilable y salida esperada.

Enunciado

Implementa un caso práctico del tema y valida el resultado por consola.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>

#define TAM 7

typedef struct Nodo {
    int clave;
    struct Nodo *sig;
} Nodo;

int hash(int clave) { return clave % TAM; }

void insertar(Nodo *tabla[], int clave) {
    int i = hash(clave);
    Nodo *n = (Nodo *)malloc(sizeof(Nodo));
    n->clave = clave;
    n->sig = tabla[i];
    tabla[i] = n;
}

int main(void) {
    Nodo *tabla[TAM] = {0};
    insertar(tabla, 10);
    insertar(tabla, 17);
    insertar(tabla, 24);
    printf("Bucket de 10: %d\n", hash(10));
    return 0;
}

Resultado esperado

1
Bucket de 10: 3

Errores frecuentes

  • No validar entradas o retornos de funciones estándar.
  • No controlar casos borde (buffers, límites, punteros nulos).
  • Omitir comprobaciones básicas de compilación y ejecución.

Aplicación práctica

Las tablas hash son la estructura detrás de diccionarios, cachés, conjuntos y casi toda búsqueda en O(1) amortizado.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Este ejercicio sirve para entrevistas y exámenes de C?

Sí. Trabaja patrones que aparecen mucho en prácticas, entrevistas técnicas y evaluaciones de programación en C.

¿Dónde seguir con más ejercicios resueltos de C?

En Programación en C en 100 ejercicios resueltos y en Ejercicios C. Kindle Unlimited: Ver en Amazon.

¿Cómo practicar este tipo de ejercicio para mejorar más rápido?

Empieza con entradas pequeñas, prueba casos límite (vacío, un elemento y capacidad máxima) y luego reescribe la solución sin copiarla.