stack.c (627B)
1 #include <stdlib.h> 2 #include <assert.h> 3 4 #include "stack.h" 5 6 struct stack { 7 size_t len; 8 size_t cap; 9 void **items; 10 }; 11 12 stack* 13 new_stack(void) 14 { 15 stack *s = malloc(sizeof(stack)); 16 s->len = 0; 17 s->cap = 1; 18 s->items = malloc(s->cap*sizeof(void*)); 19 return s; 20 } 21 22 void 23 push(stack* s, void* p) 24 { 25 if (s->len == s->cap) 26 s->items = realloc(s->items, sizeof(void*) * (s->cap *= 2)); 27 assert(s->items); 28 29 s->items[s->len++] = p; 30 } 31 32 void* pop(stack* s) 33 { 34 return s->items[--s->len]; 35 } 36 37 void* 38 peek(stack* s) 39 { 40 if (s->len > 0) 41 return s->items[s->len - 1]; 42 else 43 return NULL; 44 } 45 46 bool 47 is_empty(stack* s) 48 { 49 return (s->len == 0); 50 }