#include "stack.h" stack stack_create(void){ //Alloue la mémoire nécessaire pour stocker une stack stack s = malloc( sizeof(stack) ); //Vérifie que l'allocation s'est bien passée if( s == NULL ){ fprintf(stderr, " stack.c::stack_create >> Allocation mémoire de la pile impossible.\n"); exit(EXIT_FAILURE); } s->taille = 0; return s; } int stack_empty(stack s){ unsigned int resultat; if( s->taille == 0 ) resultat = 1; else resultat = 0; return resultat; } void *stack_top(stack s){ void *retour; if( stack_empty(s) ){ fprintf(stderr, " stack.c::stack_top >> La pile est vide.\n"); //on retourne NULL retour = NULL; }else{ //on retourne le dernier element du tableau (c'est un pointeur) retour = s->donnees[ s->taille - 1]; } return retour; } void stack_push(stack s, void *object){ //Alloue une case supplémentaire à la pile s->donnees = realloc( s->donnees, ++s->taille * sizeof(*object) ); if( s == NULL ){ fprintf(stderr, " stack.c::stack_push >> Reallocation mémoire de la pile impossible.\n"); exit(EXIT_FAILURE); } //Affectation de la derniere case de la pile s->donnees[ s->taille -1 ] = object; } void stack_pop(stack s){ if( stack_empty(s) ){ fprintf(stderr, " stack.c::stack_pop >> La pile est vide.\n"); exit(EXIT_FAILURE); } if( s->taille == 1 ){ //Libère la mémoire de s->donnees free( s->donnees ); s->taille = 0; }else{ //Desalloue une case mémoire int taille_element = sizeof( s->donnees[0] ); s->donnees = realloc( s->donnees, --s->taille * taille_element ); } } void stack_affiche(stack s){ printf("Est vide? %d\nTaille : %d\n", stack_empty(s), s->taille); for(int i=0; i++; itaille){ printf("[%d] = %d", i, *stack_top(s)); } } int main(void){ stack s = stack_create(); int a=15; int b=12; stack_push(s, &a); return 0; }