greg95 | c bon je crois que g resolu mon pb :
Code :
- * Hash CODING*/
- //Gestion des colisions de maniere chainee
- typedef struct ListeptrGpassager
- {
- ptr_GPassager Passager;
- struct ListeptrGpassager* suivant;
- }ListeptrGpassager;
- typedef ListeptrGpassager* ptr_ListeptrGpassager;
- typedef struct TableH
- {
- ListeptrGpassager** TableauPtr;
- int Nelement;
- }TableH;
- typedef TableH* ptr_TableH;
- #include "hashcoding.h"
- #include "avl.h"
- //Initialisation de la table de hachage
- ptr_TableH InitTable(ptr_TableH T,int Nmax)
- {
- int i;
- T=malloc(sizeof(TableH));
- T->Nelement=0;
- T->TableauPtr=(ptr_ListeptrGpassager*)malloc(sizeof(ListeptrGpassager*)*Nmax);//on alloue N cases
- for(i=0;i<=Nmax;i++)
- {
- T->TableauPtr[i]=NULL;
- }
- return T;
- }
- //detruire la table de hashage
- void DetruireTable(ptr_TableH T)
- {
- free(T->TableauPtr);
- free(T);
- }
- //fonction de hachage
- int h(char* Cle1,char* Cle2,char* Cle3,int TailleTable)
- {
- int somme=0,somme2=0,somme3=0;
- int i;
- for(i=0;i<strlen(Cle1);i++) somme+=Cle1[i];
- for(i=0;i<strlen(Cle2);i++) somme2+=Cle2[i];
- for(i=0;i<strlen(Cle3);i++) somme3+=Cle3[i];
- somme=somme+somme2+somme3;
- return somme % TailleTable;
- }
- //Insertion dans la table avec gestion des colisions de maniere chainee
- int InsererTable(ptr_TableH T,ptr_GPassager Gp,int TailleTable)
- {
- int Cle=h(Gp->NomPassager,Gp->PrenomPassager,Gp->NumeroTelPassager,TailleTable);
- printf("CLE:\n",Cle);
- if(T->TableauPtr[Cle]==NULL) T->Nelement++;
- T->TableauPtr[Cle]=InsererListeptrGpassager(T->TableauPtr[Cle],Gp);
- return 0;
- }
- //Gestion des colisions
- ptr_ListeptrGpassager InsererListeptrGpassager(ptr_ListeptrGpassager L,ptr_GPassager Gp)
- {
- ptr_ListeptrGpassager courant;
- courant=malloc(sizeof(ListeptrGpassager));
- courant->Passager=Gp;
- if(L==NULL)
- {
- L=courant;
- courant->suivant=NULL;
- return L;
- }
- else
- {
- courant->suivant=L;
- L=courant;
- return L;
- }
- }
|
Message édité par greg95 le 31-05-2003 à 20:18:20
|