TP5: Implement linked list counting iteratively and recursively
[Algorithmic_C.git] / TP5 / exo4 / liste_chainee.c
CommitLineData
3f0f8bfd
JB
1/********************************************************************/
2/* Implantation d'une liste triee d'entiers */
3/********************************************************************/
4#include <stdio.h>
5#include <stdlib.h>
6
7typedef int element;
8
9typedef struct cellule {
10 element valeur;
11 struct cellule *suivant;
12} Cellule, *Liste;
13
14Liste ajouter_iter(element e, Liste L)
15{
16 Cellule *pc, *p1 = L, *p2 = NULL;
17
18 pc = (Cellule *) malloc(sizeof(Cellule));
19 pc->valeur = e;
20 pc->suivant = NULL;
21
22 if (!L) /* liste vide */
23 return pc;
24
25 while (p1 && (e >= p1->valeur)) {
26 p2 = p1;
27 p1 = p1->suivant;
28 }
29
30 if (!p2) { /* insertion en tete */
31 pc->suivant = L;
32 L = pc;
33 } else { /* insertion entre p2 et p1 */
34 p2->suivant = pc;
35 pc->suivant = p1;
36 }
37
38 return L;
39}
40
41int longueur_iter(Liste L)
42{
43 int longueur = 0;
44
105fac43 45 while (L != NULL) {
3f0f8bfd
JB
46 L = L->suivant;
47 longueur++;
48 }
49 return longueur;
50}
51
52int longueur_rec(Liste L)
53{
105fac43
JB
54 if (L != NULL) {
55 return 1 + longueur_rec(L->suivant);
56 } else {
57 return 0;
58 }
3f0f8bfd
JB
59}
60
61void visualiser_iter(Liste L)
62{
63 /* ... */
64}
65
66void visualiser_rec(Liste L)
67{
68 /* ... */
69}
70
71int rechercher_iter(element e, Liste L)
72{
73 /* ... */
74}
75
76Liste rechercher_rec(element e, Liste L)
77{
78 /* ... */
79}
80
81Liste ajouter_rec(element e, Liste L)
82{
83 /* ... */
84}
85
86Liste supprimer_iter(element e, Liste L)
87{
88 /* ... */
89}
90
91Liste supprimer_rec(element e, Liste L)
92{
93 /* ... */
94}
95
96Liste inverser_iter(Liste L)
97{
98 /* ... */
99}
100
101Liste inverser_rec(Liste L)
102{
103 /* ... */
104}
105
106/****************************************************************************/
107int main()
108{
109 int x;
110 Liste L = NULL;
105fac43
JB
111 L = ajouter_iter(2, L);
112 L = ajouter_iter(1, L);
113 L = ajouter_iter(3, L);
114 printf("Saisir un entier a ajouter a la site\n");
3f0f8bfd
JB
115 scanf("%d", &x);
116 L = ajouter_iter(x, L);
105fac43 117 printf("longueur=%d\n", longueur_rec(L));
3f0f8bfd
JB
118 visualiser_iter(L);
119 /* ... */
120}
121
122/****************************************************************************/