TP5: feed all exercices code skeleton to Lindent
[Algorithmic_C.git] / TP5 / exo1 / pile_contigue.c
1 /*******************************************************************************
2 Implantation contiguë d'un type Pile d'entiers
3
4 La pile est représentée par une structure:
5 un tableau représente les valeurs
6 un entier représente le nombre d'éléments de la pile
7 *******************************************************************************/
8 #include<stdio.h>
9 #include<stdlib.h>
10
11 #define LONG_PILE 25
12 typedef int element;
13 typedef struct {
14 int nbre;
15 element tab[LONG_PILE];
16 } Pile;
17
18 Pile pile_vide(void)
19 {
20 Pile p;
21 p.nbre = 0;
22 return p;
23 }
24
25 int est_vide(Pile p)
26 {
27 return p.nbre == 0; /* ou return !p.nbre; */
28 }
29
30 element sommet(Pile p)
31 /* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
32 {
33 if (est_vide(p)) {
34 printf("Erreur - pile vide\n");
35 exit(-1);
36 }
37 return p.tab[p.nbre - 1];
38 }
39
40 Pile empiler(element e, Pile p)
41 {
42 if (p.nbre == LONG_PILE) {
43 printf("Erreur - pile pleine\n");
44 exit(-1);
45 }
46 p.tab[p.nbre++] = e;
47 return p;
48 }
49
50 Pile depiler(Pile p)
51 /* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
52 {
53 if (est_vide(p)) {
54 printf("Erreur - pile vide\n");
55 exit(-1);
56 }
57 p.nbre--;
58 return p;
59 }
60
61 element depiler2(Pile * p)
62 { /* ATTENTION: la pile est modifiée */
63 /* ATTENTION: dépiler une pile vide n'a pas de sens */
64 if (est_vide(*p)) {
65 printf("Erreur - pile vide\n");
66 exit(-1);
67 }
68 return p->tab[p->nbre-- - 1];
69 }
70
71 /******************************************************************************/
72
73 int main()
74 {
75 Pile p;
76 int i;
77
78 p = pile_vide();
79
80 for (i = 0; i < 20; i++)
81 p = empiler(i, p);
82
83 for (i = 0; i < 25; i++)
84 printf("%d\n", depiler2(&p));
85 }
86
87 /********************************************************************/