1 /********************************************************************/
2 /* Implantation contiguë d'un type Pile d'entiers */
3 /* On rallonge le tableau par realloc quand il est plein */
4 /********************************************************************/
10 typedef struct { int nbre
;
15 {Pile p
; p
.nbre
=0; p
.taille_tab
=LONG_PILE
;
16 p
.tab
=(element
*)calloc(p
.taille_tab
, sizeof(element
));
21 {return p
.nbre
==0; /* ou return !p.nbre; */
24 element
sommet(Pile p
)
25 /* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
26 {if (est_vide(p
)) { printf("Erreur - pile vide\n"); exit(-1); }
27 return p
.tab
[p
.nbre
-1];
30 Pile
empiler(element e
,Pile p
)
31 {if (p
.nbre
==p
.taille_tab
)
32 {printf("pile pleine %d - on la rallonge!\n",p
.taille_tab
);
34 p
.tab
=realloc(p
.tab
, p
.taille_tab
*sizeof(element
));
41 /* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
42 {if (est_vide(p
)) { printf("Erreur - pile vide\n"); exit(-1); }
47 element
depiler2(Pile
*p
) /* ATTENTION: la pile est modifiée */
48 /* ATTENTION: dépiler une pile vide n'a pas de sens */
49 {if (est_vide(*p
)) { printf("Erreur - pile vide\n"); exit(-1); }
50 return p
->tab
[p
->nbre
-- -1];
52 /********************************************************************/
60 for (i
=0; i
<20; i
++) p
=empiler(i
,p
);
62 for (i
=0; i
<25; i
++) printf("%d\n",depiler2(&p
));
64 /********************************************************************/