TP5: feed all exercices code skeleton to Lindent
[Algorithmic_C.git] / TP5 / exo1 / pile_contigue.c
CommitLineData
16d1d589
JB
1/*******************************************************************************
2 Implantation contiguë d'un type Pile d'entiers
3
4La 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
1960d1ad 7*******************************************************************************/
16d1d589
JB
8#include<stdio.h>
9#include<stdlib.h>
10
11#define LONG_PILE 25
12typedef int element;
1960d1ad
JB
13typedef struct {
14 int nbre;
15 element tab[LONG_PILE];
16} Pile;
17
16d1d589 18Pile pile_vide(void)
1960d1ad
JB
19{
20 Pile p;
21 p.nbre = 0;
16d1d589
JB
22 return p;
23}
24
25int est_vide(Pile p)
1960d1ad
JB
26{
27 return p.nbre == 0; /* ou return !p.nbre; */
16d1d589
JB
28}
29
30element sommet(Pile p)
31/* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
1960d1ad
JB
32{
33 if (est_vide(p)) {
34 printf("Erreur - pile vide\n");
35 exit(-1);
36 }
37 return p.tab[p.nbre - 1];
16d1d589 38}
1960d1ad
JB
39
40Pile 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;
16d1d589
JB
47 return p;
48}
49
50Pile depiler(Pile p)
51/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
1960d1ad
JB
52{
53 if (est_vide(p)) {
54 printf("Erreur - pile vide\n");
55 exit(-1);
56 }
57 p.nbre--;
16d1d589
JB
58 return p;
59}
60
1960d1ad
JB
61element 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];
16d1d589 69}
16d1d589 70
1960d1ad 71/******************************************************************************/
16d1d589
JB
72
73int main()
1960d1ad
JB
74{
75 Pile p;
76 int i;
16d1d589 77
1960d1ad 78 p = pile_vide();
16d1d589 79
1960d1ad
JB
80 for (i = 0; i < 20; i++)
81 p = empiler(i, p);
16d1d589 82
1960d1ad
JB
83 for (i = 0; i < 25; i++)
84 printf("%d\n", depiler2(&p));
16d1d589 85}
16d1d589 86
1960d1ad 87/********************************************************************/