#include #include "memoire.h" #include "pile.h" #define TAILLE_PILE 10 static void pile_ajuste(struct pile *p); struct pile * pile_creer(void) { struct pile *p = memoire_allouer(sizeof(struct pile)); p->sommet = -1; p->capacite = TAILLE_PILE; p->pile = memoire_allouer(TAILLE_PILE * sizeof(int)); return p; } int pile_vide(struct pile *p) { return p->sommet == -1; } void pile_empile(struct pile *p, int valeur) { pile_ajuste(p); p->pile[++p->sommet] = valeur; } int pile_depile(struct pile *p) { int valeur = pile_valeur(p); p->sommet--; return valeur; } int pile_valeur(struct pile *p) { assert(! pile_vide(p)); return p->pile[p->sommet]; } int pile_taille(struct pile *p) { return p->sommet + 1; } void pile_detruire(struct pile *p) { memoire_liberer(p->pile); memoire_liberer(p); } static void pile_ajuste(struct pile *p) { if (p->sommet == p->capacite - 1) { p->capacite *= 2; p->pile = memoire_reallouer(p->pile, p->capacite * sizeof(int)); } }