TP 5: Add corrections
[Algorithmic_C.git] / TP5 / exo5 / pile_chaine_correction.c
diff --git a/TP5/exo5/pile_chaine_correction.c b/TP5/exo5/pile_chaine_correction.c
new file mode 100644 (file)
index 0000000..e4e562c
--- /dev/null
@@ -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<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));
+}
+/********************************************************************/
+