Bonsoir a tous. Je vais une nouvelle fois avoir besoin de vous.
Je viens de finir un module de liste chainee generique et je voudrais savoir s'il est bien code.
Je m'explique au dela de la simple culture generale je vais devoir
utiliser ce code pour un projet dans mes etudes et je ne voudrais pas
partir sur de mauvaise base.
Je ne demande qu'a l'ameliorer et surtour a eviter les ERREURS.
PS : desole pour la longueur
*******************************************************************************
typedef void (* Traitement)(void *);
struct Cellule
{
void * Element;
//L'element stocke dans la cellule.
struct Cellule * Cellule_Suivante; //Pointeur sur la cellule suivante.
Traitement Fonction_De_Traitement;
};
struct Liste
{
struct Cellule * Premiere_Cellule; //Pointeur sur la premiere adresse de la liste.
};
*******************************************************************************
struct Liste * li_Initialiser_Liste (void)
{
struct Liste * L1;
if ( !(L1 = (struct Liste *) malloc (sizeof (struct Liste))) )
{
perror("ERREUR");
exit(1);
}
L1->Premiere_Cellule = NULL;
return L1;
}
void li_Ajoute_EnTete (struct Liste * L1, const void * Element, const Traitement T)
{
struct Cellule * Nouvelle_Cellule;
if ( !(Nouvelle_Cellule = (struct Cellule *) malloc (sizeof (struct Cellule))) )
{
perror("ERREUR");
exit(1);
}
Nouvelle_Cellule->Element = (void *) Element;
Nouvelle_Cellule->Fonction_De_Traitement = T;
Nouvelle_Cellule->Cellule_Suivante = L1->Premiere_Cellule;
L1->Premiere_Cellule = Nouvelle_Cellule;
}
void li_Supprimer_EnTete (struct Liste * L1)
{
struct Cellule * Pointeur_Travail = L1->Premiere_Cellule;
if (li_Tester_Liste_Vide(L1))
printf("La liste est deja vide\n");
else
{
L1->Premiere_Cellule = Pointeur_Travail->Cellule_Suivante;
free(Pointeur_Travail);
}
}
void li_Afficher_Liste (const struct Liste * L1)
{
struct Cellule * Pointeur_Travail = L1->Premiere_Cellule;
if (li_Tester_Liste_Vide(L1))
printf("La liste est vide\n");
else
{
while (Pointeur_Travail != NULL)
{
Pointeur_Travail->Fonction_De_Traitement
(Pointeur_Travail->Element);
Pointeur_Travail =
Pointeur_Travail->Cellule_Suivante;
}
printf("\n");
}
}
void li_Afficher_Entier (const void * Element)
{
int * Pointeur_Sur_Entier = (int *) Element;
printf("%d, ", * Pointeur_Sur_Entier);
}
void li_Afficher_Charactere (const void * Element)
{
char * Pointeur_Sur_Charactere = (char *) Element;
printf("%c, ", * Pointeur_Sur_Charactere);
}
void li_Afficher_Chaine_De_Characteres (const void * Element)
{
printf("%s , ", (char *)Element);
}
******************************************************************************
int i;
struct Liste * l;
char * T[3] = {"PAPA", "MAMAN", "BEBE"};
l = li_Initialiser_Liste();
for (i = 9; i > 0; i--)
{
int * p = (int *) malloc (sizeof (int));
*p = i;
li_Ajoute_EnTete (l, (int *) p, (void *) li_Afficher_Entier);
}
li_Afficher_Liste(l);
for (i = 'E'; i >= 'A'; i--)
{
char * c = (char *) malloc (sizeof (char));
*c = i;
li_Ajoute_EnTete (l, (char *) c, (void *) li_Afficher_Charactere);
}
li_Afficher_Liste(l);
for (i = 0; i <= 2; i++)
li_Ajoute_EnTete (l, (char **) T[i], (void *)
li_Afficher_Chaine_De_Characteres);
li_Afficher_Liste(l);
******************************************************************************
Merci pour tous vos futurs conseils et j'espere ne pas m'etre prompte de section pour poster.
Bonne soiree