diff --git a/stack.c b/stack.c index 1e331d9d7c88b04e9ebe8f06f97751e638cc237e..fc4205b03f83906530ccc57a6e49d70d1683bb95 100644 --- a/stack.c +++ b/stack.c @@ -1,6 +1,6 @@ -#include "stack.h" -#include <stdio.h> #include <stdlib.h> +#include "stack.h" + #define DEFAULT_CAPACITY 4 @@ -17,6 +17,18 @@ void stack_destroy(stack *s) { s->top = -1; } +void stack_push(stack *s, int value) +{ + if (s->top == s->capacity-1) + { + assert(s->data = realloc(s->capacity * 2 * sizeof(int))); + s->capacity=s->capacity * 2; + } + + s->top++; + s->data[s->top] = value; +} + void stack_pop(stack *s, int *value) { if (stack_is_empty(*s)) { return; @@ -62,3 +74,4 @@ void stack_clone(stack s, stack *clone) { int get_length(stack s) { return s.top + 1; } + diff --git a/stack.h b/stack.h index 5ee3740c9a8445a8fc3dccc9b12b7b7469ecbb8d..010bfdc0153b05dbe62b975fe51830c6ac26f26e 100644 --- a/stack.h +++ b/stack.h @@ -1,11 +1,13 @@ #ifndef _STACK_H_ #define _STACK_H_ + typedef struct _stack { int *data; int capacity; int top; } stack; +void stack_push(stack *s, int val); void stack_init(stack *stack);