1 /******************************************************************************/
2 /* Hachage par chainage */
3 /******************************************************************************/
8 /* on choisit M tres petit pour tester le programme, mais en realite,
13 typedef struct cellule
{element valeur
;
14 struct cellule
*suivant
; } Cellule
, *Liste
;
16 typedef struct {Liste T
[M
]; } t_table
;
18 int h(element x
) {return x
%M
; }
19 /* "mauvaise" fonction de hachage - juste pour tester le programme */
24 for (i
=0; i
<M
; i
++) t
.T
[i
]=NULL
;
28 int rechercher(element x
, t_table t
)
31 while (p
) if (x
==p
->valeur
) return 1;
36 int inserer(element x
, t_table
*t
)
37 /* retourne 0 si x est deja dans la table */
39 Cellule
*p
=t
->T
[i
], *preced
=NULL
;
40 while (p
) if (x
==p
->valeur
) return 0;
41 else {preced
= p
; p
=p
->suivant
; }
42 if (preced
==NULL
) {t
->T
[i
]=(Cellule
*)malloc(sizeof(Cellule
));
44 t
->T
[i
]->suivant
=NULL
;
46 else {preced
->suivant
=(Cellule
*)malloc(sizeof(Cellule
));
47 preced
->suivant
->valeur
=x
;
48 preced
->suivant
->suivant
=NULL
;
54 {if (L
){printf("%d\t",L
->valeur
);
59 void afficher(t_table t
)
63 if (t
.T
[i
]) {printf("t[%d]=\t",i
); visu(t
.T
[i
]); printf("\n");}
67 /******************************************************************************/
73 inserer(3,&t
); afficher(t
);
74 printf("%d\n",rechercher(3,t
));
75 printf("%d\n",rechercher(12,t
));
76 inserer(5,&t
); afficher(t
);
77 inserer(13,&t
); afficher(t
);
78 inserer(9,&t
); afficher(t
);
79 inserer(19,&t
); afficher(t
);
80 inserer(23,&t
); afficher(t
);
82 /*****************************************************************************
83 Etat de la table a la fin du programme
84 --------------------------------------
88 *****************************************************************************/