C/Visual C - HASH TABLE

 
Vista:

HASH TABLE

Publicado por Imanol (36 intervenciones) el 02/04/2001 11:38:33
Como se utiliza una hash table en C/VBisual C.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Uso de una tabla hash en C para almacenar y buscar elementos

Publicado por Alejandro (913 intervenciones) el 17/09/2024 20:44:20
Imanol, una hash table, también conocida como tabla hash, es una estructura de datos que permite almacenar y recuperar información de manera eficiente. En C o Visual C++, puedes utilizar la biblioteca estándar de C para implementar una hash table.

Aquí hay un ejemplo de cómo utilizar una hash table en C:

1. Incluye la biblioteca estándar de C para hash tables:

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <limits.h>
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <iso646.h>
#include <locale.h>
#include <math.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>

2. Define la estructura de la hash table:

1
2
3
4
5
6
7
8
9
10
#define TABLE_SIZE 100
 
typedef struct {
    char* key;
    int value;
} Entry;
 
typedef struct {
    Entry* entries[TABLE_SIZE];
} HashTable;

3. Implementa las funciones para manejar la hash table:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
unsigned int hash(const char* key) {
    unsigned int hash = 0;
    for (int i = 0; key != '\0'; i++) {
        hash = (hash * 31) + key;
    }
    return hash % TABLE_SIZE;
}
 
HashTable* createHashTable() {
    HashTable* hashtable = malloc(sizeof(HashTable));
    memset(hashtable->entries, 0, sizeof(Entry*) * TABLE_SIZE);
    return hashtable;
}
 
void insert(HashTable* hashtable, const char* key, int value) {
    unsigned int index = hash(key);
    Entry* entry = malloc(sizeof(Entry));
    entry->key = strdup(key);
    entry->value = value;
    hashtable->entries[index] = entry;
}
 
int get(HashTable* hashtable, const char* key) {
    unsigned int index = hash(key);
    Entry* entry = hashtable->entries[index];
    if (entry != NULL && strcmp(entry->key, key) == 0) {
        return entry->value;
    }
    return -1; // Valor predeterminado si no se encuentra la clave
}
 
void removeEntry(HashTable* hashtable, const char* key) {
    unsigned int index = hash(key);
    Entry* entry = hashtable->entries[index];
    if (entry != NULL && strcmp(entry->key, key) == 0) {
        free(entry->key);
        free(entry);
        hashtable->entries[index] = NULL;
    }
}
 
void destroyHashTable(HashTable* hashtable) {
    for (int i = 0; i < TABLE_SIZE; i++) {
        Entry* entry = hashtable->entries;
        if (entry != NULL) {
            free(entry->key);
            free(entry);
        }
    }
    free(hashtable);
}

4. Utiliza la [i]hash table
en tu programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
    HashTable* hashtable = createHashTable();
 
    insert(hashtable, "clave1", 10);
    insert(hashtable, "clave2", 20);
 
    int valor1 = get(hashtable, "clave1");
    int valor2 = get(hashtable, "clave2");
 
    printf("Valor1: %d\n", valor1);
    printf("Valor2: %d\n", valor2);
 
    removeEntry(hashtable, "clave1");
 
    int valor1_actualizado = get(hashtable, "clave1");
    printf("Valor1 actualizado: %d\n", valor1_actualizado);
 
    destroyHashTable(hashtable);
 
    return 0;
}

Este es un ejemplo básico de cómo utilizar una [i]hash table
en C. Puedes adaptar este código según tus necesidades y agregar más funcionalidades según sea necesario. Recuerda liberar la memoria correctamente cuando ya no necesites la [i]hash table
para evitar fugas de memoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar