TP5: properly indent more C files
[Algorithmic_C.git] / TP5 / exo_c5 / pile_chaine_correction.c
CommitLineData
f5904379
JB
1/*******************************************************************************
2 Implantation d'un type Pile d'entiers sous forme chaînée
3 La pile est représentée par un pointeur.
4 La pile vide est représentée par NULL.
5*******************************************************************************/
6#include<stdio.h>
7#include<stdlib.h>
67b44095 8
f5904379
JB
9typedef int element;
10
11typedef struct cellule {
67b44095
JB
12 element valeur;
13 struct cellule *suivant;
f5904379 14} Cellule, *Pile;
67b44095 15
f5904379
JB
16Pile pile_vide(void)
17{
67b44095 18 return NULL;
f5904379
JB
19}
20
21int est_vide(Pile p)
22{
67b44095
JB
23 return (p == NULL); /* ou return !p; */
24}
f5904379
JB
25
26element sommet(Pile p)
27/* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
28{
67b44095
JB
29 if (est_vide(p)) {
30 printf("Erreur - pile vide\n");
31 exit(-1);
32 }
33 return p->valeur; /* la pile n'est pas modifiée */
f5904379
JB
34}
35
67b44095 36Pile empiler(element e, Pile p)
f5904379 37{
67b44095
JB
38 Cellule *pc = (Cellule *) malloc(sizeof(Cellule));
39 pc->valeur = e;
40 pc->suivant = p;
41 return pc;
f5904379
JB
42}
43
44Pile depiler(Pile p)
45/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
46{
67b44095
JB
47 Cellule *pc = p;
48 if (est_vide(p)) {
49 printf("Erreur - pile vide\n");
50 exit(-1);
51 }
52 p = p->suivant;
53 free(pc);
54 return p;
f5904379
JB
55}
56
67b44095 57element depiler2(Pile * p)
f5904379 58{
67b44095
JB
59 /* ATTENTION: la pile est modifiée */
60 /* ATTENTION: cette opération n'a pas de sens avec une pile vide */
61 Cellule *pc = *p;
62 element e;
63 if (est_vide(*p)) {
64 printf("Erreur - pile vide\n");
65 exit(-1);
66 }
67 e = (*p)->valeur;
68 *p = (*p)->suivant;
69 free(pc);
70 return e;
f5904379
JB
71}
72
f5904379
JB
73/******************************************************************************/
74int main()
67b44095
JB
75{
76 Pile p;
77 int i;
78 p = pile_vide();
79 for (i = 0; i < 20; i++)
80 p = empiler(i, p);
81 for (i = 0; i < 25; i++)
82 printf("%d\n", depiler2(&p));
f5904379 83}
f5904379 84
67b44095 85/********************************************************************/