Add TP5 skeleton
[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 { int nbre;
14 element tab[LONG_PILE];} Pile;
15
16 Pile pile_vide(void)
17 { Pile p; p.nbre=0;
18 return p;
19 }
20
21 int est_vide(Pile p)
22 { return p.nbre==0; /* ou return !p.nbre; */
23 }
24
25 element 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 }
30 Pile empiler(element e,Pile p)
31 { if (p.nbre==LONG_PILE) { printf("Erreur - pile pleine\n"); exit(-1); }
32 p.tab[p.nbre++]=e;
33 return p;
34 }
35
36 Pile 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); }
39 p.nbre--;
40 return p;
41 }
42
43 element 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); }
46 return p->tab[p->nbre-- -1];
47 }
48 /******************************************************************************/
49
50
51 int 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