Commit | Line | Data |
---|---|---|
16d1d589 JB |
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 | |
1960d1ad | 7 | *******************************************************************************/ |
16d1d589 JB |
8 | #include<stdio.h> |
9 | #include<stdlib.h> | |
10 | ||
11 | #define LONG_PILE 25 | |
12 | typedef int element; | |
1960d1ad JB |
13 | typedef struct { |
14 | int nbre; | |
15 | element tab[LONG_PILE]; | |
16 | } Pile; | |
17 | ||
16d1d589 | 18 | Pile pile_vide(void) |
1960d1ad JB |
19 | { |
20 | Pile p; | |
21 | p.nbre = 0; | |
16d1d589 JB |
22 | return p; |
23 | } | |
24 | ||
25 | int est_vide(Pile p) | |
1960d1ad JB |
26 | { |
27 | return p.nbre == 0; /* ou return !p.nbre; */ | |
16d1d589 JB |
28 | } |
29 | ||
30 | element 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 | |
40 | Pile 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 | ||
50 | Pile 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 | 61 | element depiler2(Pile * p) |
43bff44a JB |
62 | /* ATTENTION: la pile est modifiée */ |
63 | { | |
1960d1ad JB |
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]; | |
16d1d589 | 70 | } |
16d1d589 | 71 | |
1960d1ad | 72 | /******************************************************************************/ |
16d1d589 JB |
73 | |
74 | int main() | |
1960d1ad JB |
75 | { |
76 | Pile p; | |
77 | int i; | |
16d1d589 | 78 | |
1960d1ad | 79 | p = pile_vide(); |
16d1d589 | 80 | |
1960d1ad JB |
81 | for (i = 0; i < 20; i++) |
82 | p = empiler(i, p); | |
16d1d589 | 83 | |
1960d1ad JB |
84 | for (i = 0; i < 25; i++) |
85 | printf("%d\n", depiler2(&p)); | |
16d1d589 | 86 | } |
16d1d589 | 87 | |
1960d1ad | 88 | /********************************************************************/ |