1 #include <stack.h>
2 
3 #include <stdlib.h>
4 
stack_create()5 stack_t* stack_create() {
6   stack_t* retVal = malloc(sizeof(stack_t));
7   retVal->size = 0;
8   retVal->capacity = 10;
9   retVal->vals = malloc(retVal->capacity*sizeof(int));
10   return retVal;
11 }
12 
stack_free(stack_t * stack)13 void stack_free(stack_t* stack) {
14   free(stack->vals);
15   free(stack);
16 }
17 
stack_size(stack_t * stack)18 int stack_size(stack_t* stack) {
19   return stack->size;
20 }
21 
stack_push(stack_t * stack,int val)22 void stack_push(stack_t* stack, int val) {
23   if(stack->size == stack->capacity) {
24     stack->capacity *= 2;
25     stack->vals = realloc(stack->vals, stack->capacity*sizeof(int));
26   }
27   stack->vals[stack->size++] = val;
28 }
29 
stack_pop(stack_t * stack)30 int stack_pop(stack_t* stack) {
31   if (stack->size >= 1)
32     return stack->vals[--stack->size];
33   else
34     return 0;
35 }
36 
stack_peak(stack_t * stack)37 int stack_peak(stack_t* stack) {
38   if (stack->size >= 1)
39     return stack->vals[stack->size-1];
40   else
41     return 0;
42 }
43 
stack_capacity(stack_t * stack)44 int stack_capacity(stack_t* stack) {
45   return stack->capacity;
46 }
47 
48 
49