--- /dev/null
+/*******************************************************************************
+ Implantation contiguë d'un type Pile d'entiers
+
+La pile est représentée par une structure:
+ un tableau représente les valeurs
+ un entier représente le nombre d'éléments de la pile
+*******************************************************************************/
+#include<stdio.h>
+#include<stdlib.h>
+
+#define LONG_PILE 25
+typedef int element;
+typedef struct { int nbre;
+ element tab[LONG_PILE];} Pile;
+
+Pile pile_vide(void)
+{ Pile p; p.nbre=0;
+ 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==LONG_PILE) { printf("Erreur - pile pleine\n"); exit(-1); }
+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));
+}
+/********************************************************************/
+