X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TP5%2Fexo4%2Fliste_chainee.c;h=b7fa6d07e3a3c72ba06015b20dca42c48b22ac35;hb=9861d3940b60068f12d4e5754eadab372453f37b;hp=746241b4ff7a51ff9594e9f89bb29eaa0cee7a05;hpb=0bf26b292b13186904bfa507ae430438f61ec02f;p=Algorithmic_C.git diff --git a/TP5/exo4/liste_chainee.c b/TP5/exo4/liste_chainee.c index 746241b..b7fa6d0 100644 --- a/TP5/exo4/liste_chainee.c +++ b/TP5/exo4/liste_chainee.c @@ -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 */ @@ -81,14 +80,9 @@ void visualiser_iter(Liste L) void _visualiser_rec(Liste L, int compteur) { if (L != NULL) { - /* FIXME: suboptimal printing to stdout, put this code path outside the recursion */ - if (compteur == 0) - printf("--Debut--\n"); printf("L[%d]->value=%d\n", compteur, L->valeur); compteur++; _visualiser_rec(L->suivant, compteur); - if (compteur == (longueur_rec(L) - 1)) - printf("--Fin--\n"); } } @@ -97,7 +91,9 @@ void visualiser_rec(Liste L) { int compteur = 0; + printf("--Debut--\n"); _visualiser_rec(L, compteur); + printf("--Fin--\n"); } bool rechercher_iter(element e, Liste L) @@ -136,6 +132,7 @@ 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) { @@ -162,7 +159,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) @@ -175,6 +182,15 @@ Liste inverser_rec(Liste L) /* ... */ } +void liberer_iter(Liste L) +{ + while (!L) { + Cellule *pcourant = L; + free(L); + L = pcourant->suivant; + } +} + void liberer_rec(Liste L) { if (!L) { @@ -209,13 +225,18 @@ 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); /* ... */ } /****************************************************************************/ +/* vim:noet:ts=8:sw=8:textwidth=80 */