HSEARCH(3) Manuel du programmeur Linux HSEARCH(3)
NOM
hsearch, hcreate, hdestroy - Gestion de table de hachage.
SYNOPSIS
#include <search.h>
ENTRY *hsearch (ENTRY item, ACTION action);
int hcreate (unsigned nel);
void hdestroy (void);
DESCRIPTION
Ces trois fonctions permettent à l'utilisateur de céeer
une table de hachage du type ENTRY (definie dans
<search.h>) qui associe une clé avec des données quelcon
ques.
La table doit d'abord être créée avec la fonction hcre
ate(). nel est une estimation du nombre d'éléments dans
la table. hcreate() permet d'ajuster cette valeur
ultérieurement, afin d'améliorer les performances de la
table de hachage.
La fonction hdestroy() libère la mémoire occupée par la
table, afin de pouvoir en construire une nouvelle.
item est du type ENTRY, qui est définie dans <search.h>
ainsi:
typedef struct entry
{
char *key;
char *data;
} ENTRY;
key pointe sur une chaîne de caractères ASCII terminée par
un caractère nul. Cette chaîne est la clé de recherche.
data pointe sur les données associées à cette clé. Un
pointeur sur un type différent de char doit être convertit
explicitement en (char *). La fonction hsearch()
recherche dans la table un élément associé à la même clé
que item, et si elle réussit, elle renvoie un pointeur sur
cet élément. Le paramètre action détermine ce que fera
hsearch() si la recherche est infructueuse. Si action
vaut ENTER alors hsearch() insèrera le nouvel élément dans
la table. Si action vaut FIND alors elle renverra NULL.
VALEUR RENVOYÉE
hcreate() renvoie NULL si la table ne peut PAS être
installée.
hsearch() renvoie NULL si l'action est ENTER et si la
GNU 4 Novembre 1996 1
HSEARCH(3) Manuel du programmeur Linux HSEARCH(3)
table est pleine ou si l'action est FIND et si l'item
n'est pas trouvé dans la table.
BUGS
L'implémentation ne permet que la gestion d'une seule
table de hachage à la fois. Les entrées ne peuvent être
qu'ajoutées dans la table, on ne peut pas les supprimer
individuellement.
EXEMPLE
Le programme suivant insère 24 éléments dans une table de
hachage, puis affiche quelques uns d'entre-eux.
#include <stdio.h>
#include <search.h>
char *data[]={ "alpha", "bravo", "charlie", "delta", "echo",
"foxtrot", "golf", "hotel", "india", "juliette",
"kilo", "lima", "mike", "november", "oscar",
"papa", "quebec", "romeo", "sierra", "tango",
"uniform", "victor", "whisky", "x-ray", "yankee",
"zulu"
};
int
main ()
{
ENTRY e, *ep;
int i;
/* On commence avec une petite table, qu'on agrandit ensuite */
hcreate(3);
for (i = 0; i < 24; i++) {
e.key = data[i];
/* Les données sont de simples entiers, pas des pointeur */
e.data = (char *)i;
ep = hsearch(e, ENTER);
/* Il ne devrait pas y avoir d'échec */
if (ep == NULL) {
fprintf (stderr, "Echec\n"); exit(1);}
}
for (i = 22; i < 26; i++) {
/* Afficher 2 entrées, et vérifier que 2 autres sont absentes */
e.key = data[i];
ep = hsearch(e, FIND);
printf ("%9.9s -> %9.9s:%d\n", e.key, ep?ep->key:"NULL",
ep ? (int)(ep->data) : 0);
}
return (0);
}
VOIR AUSSI
bsearch(3), lsearch(3), malloc(3)
GNU 4 Novembre 1996 2
HSEARCH(3) Manuel du programmeur Linux HSEARCH(3)
TRADUCTION
Christophe Blaess, 1997.
GNU 4 Novembre 1996 3