diff --git a/stack.c b/stack.c new file mode 100644 index 0000000000000000000000000000000000000000..b5eaae2fd16895bec5b44d2645314672db227ab4 --- /dev/null +++ b/stack.c @@ -0,0 +1,27 @@ +#include "stack.h" + +void stack_init(stack *s){ + s->top = -1; + s->capacity = DEFAULT_CAPACITY; + s->data = malloc(sizeof(int) * DEFAULT_CAPACITY); +} + +bool stack_is_empty(stack s){ + return s.top == -1; +} + +void stack_peek(stack s, int *value){ + if (!stack_is_empty(s)) { + *value = s.data[s.top]; + } +} + +// depile +void stack_pop(stack *s, int *val){ + if (stack_is_empty(*s)){ + return; + } + *val = s->data[s->top]; + s->top -= 1; + printf("pop : %d, top : %d\n", s->data[s->top],s->top); +} diff --git a/stack.h b/stack.h index 9796be5f47ab539a622deaa3bf8b563157b7c7ab..3d09d4b3fb3491648441339889178e01ffa15951 100644 --- a/stack.h +++ b/stack.h @@ -1,10 +1,19 @@ #ifndef _STACK_H_ #define _STACK_H_ +#include <stdio.h> +#include <stdlib.h> +#include "stdbool.h" + +#define DEFAULT_CAPACITY 4 + typedef struct _stack { int *data; int capacity; int top; } stack; +void stack_init(stack *s); +void stack_peek(stack s, int *value); + #endif