struct cellule *suivant;
} Cellule, *Liste;
+Cellule *creer_maillon(element e, Cellule * suivant)
+{
+ Cellule *pnouveau = malloc(sizeof(Cellule));
+ pnouveau->valeur = e;
+ pnouveau->suivant = suivant;
+ return pnouveau;
+}
+
Liste ajouter_iter(element e, Liste L)
{
Cellule *pc, *p1 = L, *p2 = NULL;
- pc = (Cellule *) malloc(sizeof(Cellule));
- pc->valeur = e;
- pc->suivant = NULL;
+ pc = creer_maillon(e, NULL);
if (!L) /* liste vide */
return pc;
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);
Liste rechercher_rec(element e, Liste L)
{
- if (L->valeur != e && L->suivant != NULL)
- {
+ if (L->valeur != e && L->suivant != NULL) {
return L = rechercher_rec(e, L->suivant);
}
}
Liste ajouter_rec(element e, Liste L)
{
- /* ... */
+ if (!L || !(L->valeur < e)) {
+ return creer_maillon(e, L);
+ }
+
+ L->suivant = ajouter_rec(e, L->suivant);
+
+ return L;
}
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 */
+ } else if (L->valeur == e && pavant == NULL) {
+ Cellule *pcourant = L;
+ free(L);
+ return pcourant->suivant;
+ /* supprimer au mileu de la liste */
+ } else if (L->valeur == e) {
+ Cellule *pcourant = L;
+ free(L);
+ L = pavant;
+ L->suivant = pcourant->suivant->suivant;
+ return pdebut;
+ }
+ pavant = L;
+ L = L->suivant;
+ }
}
Liste supprimer_rec(element e, Liste L)
/* ... */
}
+void liberer_rec(Liste L)
+{
+ if (!L) {
+ liberer_rec(L->suivant);
+ free(L);
+ }
+}
+
/****************************************************************************/
int main()
{
printf("L'element %d est present dans L\n", x);
else
printf("L'element %d n'est pas present dans L\n", x);
+ L = ajouter_rec(6, L);
+ 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);
+ visualiser_rec(L);
+ visualiser_iter(L);
+ liberer_rec(L);
/* ... */
}