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
|
#define TAILLE_NOM 20
#define TAILLE_TABLE 20
#define TAILLE_PRENOM 20
struct personne{
struct personne *succ;
char nom[TAILLE_NOM];
char prenom[TAILLE_PRENOM];
struct personne *pred;
};
typedef struct personne personne_t;
/* --- variable globales --- */
personne_t *table_hachage[TAILLE_TABLE];
/* --- fonction hachage --- */
int code_hachage(char clef[])
{
int tmp, i, res=0, taille;
taille = strlen(clef);
for(i=0; i<taille; i++)
{
res = (res<<4) + clef[i];
if(tmp = (res & 0xf0000000))
{
res = res ^ (tmp>>24);
res = res ^ tmp;
}
}
return res % TAILLE_TABLE;
}
/* --- suppression d'un element dans la table --- */
void suppression_element(personne_t *element_a_supprimer)
{
int code;
personne_t *pt_succ, *pt_pred;
pt_succ = element_a_supprimer->succ;
pt_pred = element_a_supprimer->pred;
if(pt_succ != NULL) /* il y a un successeur dans la liste */
{
pt_succ->pred = pt_pred;
}
if(pt_pred != NULL) /* il y a un predecesseur dans la liste */
{
pt_pred->succ = pt_succ;
}
else /* c'est le premier de la liste */
{
code = code_hachage(element_a_supprimer->nom);
table_hachage[ code] = pt_succ;
}
free(element_a_supprimer);} |
Partager