1 /********************************************************************/
2 /* Implantation d'une liste triee d'entiers */
3 /********************************************************************/
10 typedef struct cellule
{
12 struct cellule
*suivant
;
15 Cellule
*creer_maillon(element e
, Cellule
* suivant
)
17 Cellule
*pnouveau
= malloc(sizeof(Cellule
));
19 pnouveau
->suivant
= suivant
;
23 Liste
ajouter_iter(element e
, Liste L
)
25 Cellule
*pc
, *p1
= L
, *p2
= NULL
;
26 pc
= creer_maillon(e
, NULL
);
28 if (!L
) /* liste vide */
31 while (p1
&& (e
>= p1
->valeur
)) {
36 if (!p2
) { /* insertion en tete */
39 } else { /* insertion entre p2 et p1 */
47 int longueur_iter(Liste L
)
58 int longueur_rec(Liste L
)
61 return 1 + longueur_rec(L
->suivant
);
67 void visualiser_iter(Liste L
)
71 printf("--Debut--\n");
73 printf("L[%d]->value=%d\n", compteur
, L
->valeur
);
80 void _visualiser_rec(Liste L
, int compteur
)
83 printf("L[%d]->value=%d\n", compteur
, L
->valeur
);
85 _visualiser_rec(L
->suivant
, compteur
);
90 void visualiser_rec(Liste L
)
94 printf("--Debut--\n");
95 _visualiser_rec(L
, compteur
);
99 bool rechercher_iter(element e
, Liste L
)
104 if (L
->valeur
== e
) {
113 Liste
rechercher_rec(element e
, Liste L
)
115 if (L
->valeur
!= e
&& L
->suivant
!= NULL
) {
116 return L
= rechercher_rec(e
, L
->suivant
);
120 Liste
ajouter_rec(element e
, Liste L
)
122 if (!L
|| !(L
->valeur
< e
)) {
123 return creer_maillon(e
, L
);
126 L
->suivant
= ajouter_rec(e
, L
->suivant
);
131 Liste
supprimer_iter(element e
, Liste L
)
133 Cellule
*pavant
= NULL
;
137 /* supprimer en fin de liste */
138 if (L
->valeur
== e
&& L
->suivant
== NULL
) {
140 pavant
->suivant
= NULL
;
142 /* supprimer au début de la liste */
143 } else if (L
->valeur
== e
&& pavant
== NULL
) {
144 Cellule
*pcourant
= L
;
146 return pcourant
->suivant
;
147 /* supprimer au mileu de la liste */
148 } else if (L
->valeur
== e
) {
149 Cellule
*pcourant
= L
;
152 L
->suivant
= pcourant
->suivant
->suivant
;
160 Liste
supprimer_rec(element e
, Liste L
)
165 if (L
->valeur
== e
) {
170 L
->suivant
= supprimer_rec(e
, L
->suivant
);
175 Liste
inverser_iter(Liste L
)
180 Liste
inverser_rec(Liste L
)
185 void liberer_iter(Liste L
)
188 Cellule
*pcourant
= L
;
190 L
= pcourant
->suivant
;
194 void liberer_rec(Liste L
)
197 liberer_rec(L
->suivant
);
202 /****************************************************************************/
207 L
= ajouter_iter(2, L
);
208 L
= ajouter_iter(1, L
);
209 L
= ajouter_iter(3, L
);
210 L
= ajouter_iter(4, L
);
211 printf("Saisir un entier a chercher dans la liste L\n");
213 printf("L a pour longueur %d\n", longueur_rec(L
));
216 if (rechercher_iter(x
, L
))
217 printf("L'element %d est present dans L\n", x
);
219 printf("L'element %d n'est pas present dans L\n", x
);
220 if (rechercher_rec(x
, L
) != NULL
)
221 printf("L'element %d est present dans L\n", x
);
223 printf("L'element %d n'est pas present dans L\n", x
);
224 L
= ajouter_rec(6, L
);
225 L
= ajouter_rec(5, L
);
226 L
= ajouter_rec(7, L
);
228 /* L = supprimer_iter(1, L);
229 L = supprimer_iter(4, L);
230 L = supprimer_iter(2, L); */
231 L
= supprimer_rec(1, L
);
232 L
= supprimer_rec(4, L
);
233 L
= supprimer_rec(2, L
);
241 /****************************************************************************/
242 /* vim:noet:ts=8:sw=8:textwidth=80 */