TP5: feed all exercices code skeleton to Lindent
[Algorithmic_C.git] / TP5 / exo1 / pile_contigue.c
... / ...
CommitLineData
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
7*******************************************************************************/
8#include<stdio.h>
9#include<stdlib.h>
10
11#define LONG_PILE 25
12typedef int element;
13typedef struct {
14 int nbre;
15 element tab[LONG_PILE];
16} Pile;
17
18Pile pile_vide(void)
19{
20 Pile p;
21 p.nbre = 0;
22 return p;
23}
24
25int est_vide(Pile p)
26{
27 return p.nbre == 0; /* ou return !p.nbre; */
28}
29
30element 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
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;
47 return p;
48}
49
50Pile 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
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];
69}
70
71/******************************************************************************/
72
73int 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/********************************************************************/