Add TP5 skeleton
[Algorithmic_C.git] / TP5 / exo1 / pile_contigue.c
diff --git a/TP5/exo1/pile_contigue.c b/TP5/exo1/pile_contigue.c
new file mode 100644 (file)
index 0000000..4a3adc0
--- /dev/null
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ 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));
+}
+/********************************************************************/
+