#include #include "stack.h" /* Retourne une nouvelle pile vide, ou NULL en cas d'erreur. */ stack *stack_new(void) { stack *s; s = malloc(sizeof(stack)); if (!s) return NULL; s -> nb_values = 0; return s; } /* Libère la pile . */ void stack_free(stack *s) { free(s); } /* Empile le pointeur

sur la pile . Retourne 0 en cas de succès, ou -1 si la pile est saturée. */ int stack_push(stack *s, void *p) { if (s -> nb_values >= MAX_STACK_SIZE) return -1; s -> contents[s -> nb_values++] = p; return 0; } /* Dépile un pointeur depuis la pile et retourne ce pointeur, ou NULL si la pile est vide. */ void *stack_pop(stack *s) { if (!(s -> nb_values)) return NULL; return s -> contents[--(s -> nb_values)]; } /* Retourne le pointeur au sommet de la pile , sans le dépiler, ou NULL si la pile est vide. */ void *stack_top(stack *s) { if (!(s -> nb_values)) return NULL; return s -> contents[s -> nb_values - 1]; } /* Retourne le nombre d'éléments présents dans la pile . */ unsigned stack_size(stack *s) { return s -> nb_values; } /* Détermine si la pile est vide. */ int stack_is_empty(stack *s) { return s -> nb_values == 0; }