Refine .gitignore some more.
[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{
64 /* ATTENTION: dépiler une pile vide n'a pas de sens */
65 if (est_vide(*p)) {
66 printf("Erreur - pile vide\n");
67 exit(-1);
68 }
69 return p->tab[p->nbre-- - 1];
70}
71
72/******************************************************************************/
73
74int main()
75{
76 Pile p;
77 int i;
78
79 p = pile_vide();
80
81 for (i = 0; i < 20; i++)
82 p = empiler(i, p);
83
84 for (i = 0; i < 25; i++)
85 printf("%d\n", depiler2(&p));
86}
87
88/********************************************************************/