/* stack.c Pedro Flynn - pflynn@microsoftsucks.org */ #include "stack.h" struct stack* stack_create() { struct stack* new_stack; new_stack = (struct stack*) malloc(sizeof(struct stack)); new_stack->s_size = 0; new_stack->s_top = new_stack->s_bottom = NULL; return new_stack; } int stack_push(struct stack* stack,const void* data) { struct stack_element* new_element; new_element = (struct stack_element*) malloc(sizeof(struct stack_element)); new_element->se_data = (void*) data; if(!stack->s_top) stack->s_bottom = new_element; new_element->se_next = stack->s_top; stack->s_top = new_element; stack->s_size++; return 0; } int stack_pop(struct stack* stack,void** data) { struct stack_element* element; if(!stack->s_size) return -1; element = stack->s_top; *data = (void*) element->se_data; if(element->se_next) stack->s_top = element->se_next; else stack->s_top = NULL; free(element); stack->s_size--; return 0; } /* apenas debug */ void stack_print(struct stack* stack) { struct stack_element* element; if(!stack->s_size) return; element = stack->s_top; do fprintf(stdout,"%f\n",*((float*) element->se_data)); while(element = element->se_next); } int stack_empty(struct stack* stack) { void* data; if(!stack->s_size) return -1; while(!stack_pop(stack,&data)) free(data); return 0; } int stack_destroy(struct stack* stack) { stack_empty(stack); free(stack); return 0; }