X-Git-Url: https://git.piment-noir.org/?p=Algorithmic_C.git;a=blobdiff_plain;f=TP5%2Fexo4%2Fliste_chainee.c;fp=TP5%2Fexo4%2Fliste_chainee.c;h=851e35428f6d63f1ad12b2805500501bbb79effd;hp=a8589397a6aba3bf8da83b37936aedb2918203b3;hb=c31b68a4e24e74a20f09aa1d7b9906b58d4aa255;hpb=915495850ca055b20497568512c3e70a6b61a13c diff --git a/TP5/exo4/liste_chainee.c b/TP5/exo4/liste_chainee.c index a858939..851e354 100644 --- a/TP5/exo4/liste_chainee.c +++ b/TP5/exo4/liste_chainee.c @@ -12,7 +12,7 @@ typedef struct cellule { struct cellule *suivant; } Cellule, *Liste; -Cellule *creer_maillon(element e, Cellule *suivant) +Cellule *creer_maillon(element e, Cellule * suivant) { Cellule *pnouveau = malloc(sizeof(Cellule)); pnouveau->valeur = e; @@ -23,7 +23,6 @@ Cellule *creer_maillon(element e, Cellule *suivant) Liste ajouter_iter(element e, Liste L) { Cellule *pc, *p1 = L, *p2 = NULL; - pc = creer_maillon(e, NULL); if (!L) /* liste vide */ @@ -136,18 +135,19 @@ Liste supprimer_iter(element e, Liste L) { Cellule *pavant = NULL; Cellule *pdebut = L; + while (L != NULL) { /* supprimer en fin de liste */ if (L->valeur == e && L->suivant == NULL) { free(L); pavant->suivant = NULL; return pdebut; - /* supprimer au début de la liste */ + /* supprimer au début de la liste */ } else if (L->valeur == e && pavant == NULL) { Cellule *pcourant = L; free(L); return pcourant->suivant; - /* supprimer au mileu de la liste */ + /* supprimer au mileu de la liste */ } else if (L->valeur == e) { Cellule *pcourant = L; free(L); @@ -162,7 +162,17 @@ Liste supprimer_iter(element e, Liste L) Liste supprimer_rec(element e, Liste L) { - /* ... */ + if (L == NULL) { + return L; + } + if (L->valeur == e) { + Cellule *p = L; + L = L->suivant; + free(p); + } else { + L->suivant = supprimer_rec(e, L->suivant); + } + return L; } Liste inverser_iter(Liste L) @@ -218,13 +228,16 @@ int main() L = ajouter_rec(5, L); L = ajouter_rec(7, L); visualiser_iter(L); - L = supprimer_iter(1, L); - L = supprimer_iter(4, L); - L = supprimer_iter(2, L); + /* L = supprimer_iter(1, L); + L = supprimer_iter(4, L); + L = supprimer_iter(2, L); */ + L = supprimer_rec(1, L); + L = supprimer_rec(4, L); + L = supprimer_rec(2, L); visualiser_rec(L); visualiser_iter(L); - //liberer_rec(L); - liberer_iter(L); + liberer_rec(L); + //liberer_iter(L); /* ... */ }