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 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
int main(int argc, char *argv[])
{
char *key[] = { "alpha", "bravo", "charlie", "delta" };
ENTRY *ep;
ENTRY e;
int i;
// Création d'un table de 3 éléments
hcreate(3);
// Insertion d'un élément
e.key = malloc (strlen(key[0])); // Allocation mémoire dans le tas pour la clef
e.key = strcpy(e.key, key[0]); // Assignation de la valeur à la clef
e.data = malloc (sizeof(int)); // Allocation mémoire dans le tas pour le data
*(int*)e.data = 1; // Assignation dela valeur à data
ep = hsearch(e, ENTER); // Insertion dans la htable
// Insertion d'un élément
e.key = malloc (strlen(key[1]));
e.key = strcpy(e.key, key[1]);
e.data = malloc (sizeof(int));
*(int*)e.data = 2;
ep = hsearch(e, ENTER);
// Insertion d'un élément
e.key = malloc (strlen(key[2]));
e.key = strcpy(e.key, key[2]);
e.data = malloc (sizeof(int));
*(int*)e.data = 3;
ep = hsearch(e, ENTER);
// Maintenant nous scrutons toute la table pour afficher les données en
// fonction des différentes clefs. La clef n°4 "delta" n'existe pas dans
// la table.
for (i=0; i<4; i++)
{
// On recheche dans la table une donnée dont la clef est key[i]
e.key = key[i];
ep = hsearch(e, FIND);
if (ep)
{ // Un élément est trouvé pour une clef donnée
printf("Un élément est trouvé pour key = %s, data = %d\n", ep->key, *(int*)ep->data);
// On libére la mémoire de ep.key et ep.data. Ainsi à la sortie de la boucle
// il suffira de libérer la mémoire de la structure de htable pour finir le travail ;)
free (ep->key);
free (ep->data);
}
else // Aucun élément n'a été trouvé
printf("Aucun élément n'est trouvé pour key = %s\n", key[i]);
}
// Libération mémoire de la table devenue vide
hdestroy();
return 0;
} |
Partager