X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TP5%2Fexo5%2Fpile_chaine_correction.c;fp=TP5%2Fexo5%2Fpile_chaine_correction.c;h=e4e562c1a64fec0e0e228e31755296e03bb80383;hb=f5904379c91a724dcc5818fcb80e7b111dc6cf0d;hp=0000000000000000000000000000000000000000;hpb=0146cff3db3fd5c445da626bf0786e2c74a4ecaa;p=Algorithmic_C.git diff --git a/TP5/exo5/pile_chaine_correction.c b/TP5/exo5/pile_chaine_correction.c new file mode 100644 index 0000000..e4e562c --- /dev/null +++ b/TP5/exo5/pile_chaine_correction.c @@ -0,0 +1,84 @@ +/******************************************************************************* + 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 +#include + +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)); +} +/********************************************************************/ +