--- /dev/null
+/*******************************************************************************
+ Implantation d'un type Pile d'entiers sous forme chaînée
+ La pile est représentée par un pointeur.
+ La pile vide est représentée par NULL.
+*******************************************************************************/
+#include<stdio.h>
+#include<stdlib.h>
+
+typedef int element;
+
+typedef struct cellule {
+ element valeur;
+ struct cellule *suivant;
+} Cellule, *Pile;
+
+Pile pile_vide(void)
+{
+ return NULL;
+}
+
+int est_vide(Pile p)
+{
+ return (p==NULL); /* ou return !p; */
+}
+
+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->valeur; /* la pile n'est pas modifiée */
+}
+
+Pile empiler(element e,Pile p)
+{
+ Cellule * pc=(Cellule *)malloc(sizeof(Cellule));
+ pc->valeur=e;pc->suivant=p;
+ return pc;
+}
+
+Pile depiler(Pile p)
+/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
+{
+ Cellule * pc=p;
+ if (est_vide(p))
+ {
+ printf("Erreur - pile vide\n");
+ exit(-1);
+ }
+ p=p->suivant;
+ free(pc);
+ return p;
+}
+
+element depiler2(Pile * p) /*ATTENTION: la pile est modifiée */
+/* ATTENTION: cette opération n'a pas de sens avec une pile vide */
+{
+ Cellule *pc=*p;
+ element e;
+ if (est_vide(*p))
+ {
+ printf("Erreur - pile vide\n");
+ exit(-1);
+ }
+ e=(*p)->valeur;
+ *p=(*p)->suivant;
+ free(pc);
+ return e;
+}
+
+
+/******************************************************************************/
+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));
+}
+/********************************************************************/
+