--- /dev/null
+/********************************************************************/
+/* Implantation contiguë d'un type Pile d'entiers */
+/* On rallonge le tableau par realloc quand il est plein */
+/********************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+
+#define LONG_PILE 5
+typedef int element;
+typedef struct { int nbre;
+ int taille_tab;
+ element *tab; } Pile;
+
+Pile pile_vide(void)
+{Pile p; p.nbre=0; p.taille_tab=LONG_PILE;
+ p.tab=(element *)calloc(p.taille_tab, sizeof(element));
+ return p;
+}
+
+int est_vide(Pile p)
+{return p.nbre==0; /* ou return !p.nbre; */
+}
+
+element sommet(Pile p)
+/* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
+{if (est_vide(p)) { printf("Erreur - pile vide\n"); exit(-1); }
+ return p.tab[p.nbre-1];
+}
+
+Pile empiler(element e,Pile p)
+{if (p.nbre==p.taille_tab)
+ {printf("pile pleine %d - on la rallonge!\n",p.taille_tab);
+ p.taille_tab *=2;
+ p.tab=realloc(p.tab, p.taille_tab*sizeof(element));
+ }
+ p.tab[p.nbre++]=e;
+ return p;
+}
+
+Pile depiler(Pile p)
+/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
+{if (est_vide(p)) { printf("Erreur - pile vide\n"); exit(-1); }
+ p.nbre--;
+ return p;
+}
+
+element depiler2(Pile *p) /* ATTENTION: la pile est modifiée */
+/* ATTENTION: dépiler une pile vide n'a pas de sens */
+{if (est_vide(*p)) { printf("Erreur - pile vide\n"); exit(-1); }
+ return p->tab[p->nbre-- -1];
+}
+/********************************************************************/
+
+int main()
+{Pile p;
+ int i;
+
+ p=pile_vide();
+
+ for (i=0; i<20; i++) p=empiler(i,p);
+
+ for (i=0; i<25; i++) printf("%d\n",depiler2(&p));
+}
+/********************************************************************/
+