+++ /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));
-}
-/********************************************************************/
-