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