Add TP5 skeleton
[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
7*******************************************************************************/
8#include<stdio.h>
9#include<stdlib.h>
10
11#define LONG_PILE 25
12typedef int element;
13typedef struct { int nbre;
14 element tab[LONG_PILE];} Pile;
15
16Pile pile_vide(void)
17{ Pile p; p.nbre=0;
18 return p;
19}
20
21int est_vide(Pile p)
22{ return p.nbre==0; /* ou return !p.nbre; */
23}
24
25element sommet(Pile p)
26/* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
27{ if (est_vide(p)) { printf("Erreur - pile vide\n"); exit(-1); }
28 return p.tab[p.nbre-1];
29}
30Pile empiler(element e,Pile p)
31{ if (p.nbre==LONG_PILE) { printf("Erreur - pile pleine\n"); exit(-1); }
32p.tab[p.nbre++]=e;
33 return p;
34}
35
36Pile depiler(Pile p)
37/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
38{ if (est_vide(p)) { printf("Erreur - pile vide\n"); exit(-1); }
39p.nbre--;
40 return p;
41}
42
43element depiler2(Pile *p) /* ATTENTION: la pile est modifiée */
44/* ATTENTION: dépiler une pile vide n'a pas de sens */
45{ if (est_vide(*p)) { printf("Erreur - pile vide\n"); exit(-1); }
46return p->tab[p->nbre-- -1];
47}
48/******************************************************************************/
49
50
51int main()
52{Pile p;
53 int i;
54
55 p=pile_vide();
56
57 for (i=0; i<20; i++) p=empiler(i,p);
58
59 for (i=0; i<25; i++) printf("%d\n",depiler2(&p));
60}
61/********************************************************************/
62