/*!\file stack.c * * \author SOUPLET Antoine * \version 1.0 * \date 10-01-2012 * * \brief Fichier contenant toutes les fonctions relatives à la structure pile (stack) * */ #include "functionAdd.h" #include "stack.h" #include #include #include //Crée un pointeur vers une pile et alloue la mémoire nécéssaire stack** stack_new(){ stack** st_stack;//Pointeur vers la pile st_stack=myMalloc(sizeof(stack**));//allocation mémoire *st_stack=NULL; return st_stack; } //Libère l'espace mémoire alloué à la un pointeur vers une pile void freeStack(stack** st_stack) { while (*st_stack != NULL) { stack_pop(st_stack); } free(st_stack); } //Enpile une valeur void stack_push(stack **st_stack, uCharDouble ucd_value){ stack *st_tmp = myMalloc(sizeof(stack)); if (st_tmp != NULL){ st_tmp->ucd_value = ucd_value; st_tmp->prev = *st_stack; } *st_stack = st_tmp; } //Dépile une valeur et retourne celle-ci uCharDouble stack_pop(stack** st_stack){ uCharDouble ucd_res;//valeur de retour if (st_stack != NULL) { stack *st_temp = (*st_stack)->prev; ucd_res = (*st_stack)->ucd_value; free(*st_stack); *st_stack = NULL; *st_stack = st_temp; } return (ucd_res); } //Retourne le sommet de la pile uCharDouble stack_peek(stack *st_stack){ uCharDouble ucd_res; ucd_res.c_value='n'; ucd_res.d_value=0; if ((st_stack)!=NULL) { ucd_res = st_stack->ucd_value; } return (ucd_res); }