TP5: properly indent more C files
[Algorithmic_C.git] / TP5 / exo_c5 / pile_chaine_correction.c
... / ...
CommitLineData
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>
8
9typedef int element;
10
11typedef struct cellule {
12 element valeur;
13 struct cellule *suivant;
14} Cellule, *Pile;
15
16Pile pile_vide(void)
17{
18 return NULL;
19}
20
21int est_vide(Pile p)
22{
23 return (p == NULL); /* ou return !p; */
24}
25
26element sommet(Pile p)
27/* ATTENTION: consulter le sommet d'une pile vide n'a pas de sens */
28{
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 */
34}
35
36Pile empiler(element e, Pile p)
37{
38 Cellule *pc = (Cellule *) malloc(sizeof(Cellule));
39 pc->valeur = e;
40 pc->suivant = p;
41 return pc;
42}
43
44Pile depiler(Pile p)
45/* ATTENTION: supprimer le sommet d'une pile vide n'a pas de sens */
46{
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;
55}
56
57element depiler2(Pile * p)
58{
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;
71}
72
73/******************************************************************************/
74int main()
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));
83}
84
85/********************************************************************/