Ce programme implémente une table de hachage en C. Une table de hachage est une structure de données permettant de stocker et de rechercher des paires clé-valeur de manière efficace. Elle utilise une fonction de hachage pour mapper les clés à des emplacements spécifiques dans une table.
-
Initialisation de la table de hachage :
- La fonction
hashtable_initinitialise une table de hachage avec une taille donnée et une fonction de hachage personnalisée.
- La fonction
-
Insertion de paires clé-valeur :
- La fonction
hashtable_insertinsère une paire clé-valeur dans la table de hachage.
- La fonction
-
Suppression de paires clé-valeur :
- La fonction
hashtable_removesupprime une paire clé-valeur basée sur la clé spécifiée.
- La fonction
-
Recherche de valeurs :
- La fonction
hashtable_getretourne la valeur associée à une clé donnée.
- La fonction
-
Vérification de l'existence d'une clé :
- La fonction
hashtable_containsvérifie si une clé existe dans la table de hachage.
- La fonction
-
Suppression complète :
- La fonction
hashtable_dellibère la mémoire allouée à la table de hachage.
- La fonction
Voici un exemple d'utilisation du programme dans la fonction main :
#include "hashtable.h"
size_t custom_hash(char *key) {
unsigned long hash = 5381;
int c;
while ((c = *key++))
hash = ((hash << 5) + hash) + c;
return hash;
}
int main() {
struct hashtable *ht = hashtable_init(10, custom_hash);
struct obj_and_free key = {"example", NULL};
struct obj_and_free value = {"value", NULL};
hashtable_insert(ht, key, value);
printf("Contains key 'example': %d\n", hashtable_contains(ht, "example"));
printf("Value for 'example': %s\n", (char *)hashtable_get(ht, "example"));
hashtable_remove(ht, "example");
printf("Contains key 'example' after removal: %d\n", hashtable_contains(ht, "example"));
hashtable_del(ht);
return 0;
}L'exemple ci-dessus affiche :
Contains key 'example': 1
Value for 'example': value
Contains key 'example' after removal: 0
-
Initialisation :
hashtable_init: Alloue et initialise une table de hachage.
-
Opérations principales :
hashtable_insert: Insère une paire clé-valeur.hashtable_remove: Supprime une clé et sa valeur associée.hashtable_get: Récupère la valeur associée à une clé.hashtable_contains: Vérifie si une clé est présente.
-
Gestion de mémoire :
hashtable_del: Libère la mémoire allouée à la table et ses éléments.
- Gestion des collisions :
- Actuellement, une gestion simple des collisions est mise en place via des listes chaînées.
- Optimisation des performances :
- Une redimension dynamique de la table pourrait être ajoutée pour éviter les ralentissements dus aux collisions.
- Extensions possibles :
- Support pour d'autres types de données clés ou valeurs.
Pour compiler et exécuter le programme :
gcc -o hashtable main.c hashtable.c
./hashtablejean lepeltier