#include "./stack.h" #include #include bool stack_is_empty(stack *s) { if (!s || s->top == -1) { return true; } return false; } stack *new_stack(size_t size) { stack *s = malloc(sizeof(stack)); if (!s) return NULL; s->data = malloc(size * sizeof(void *)); if (!s->data) { free(s); return NULL; } s->capacity = size; s->top = -1; return s; } void free_stack(stack *s) { if (!s) return; free(s->data); free(s); } void *pop(stack *s) { if (stack_is_empty(s)) return NULL; return s->data[s->top--]; } void *peek(stack *s) { if (stack_is_empty(s)) return NULL; return s->data[s->top]; } void *push(stack *s, void *data) { if (!s) return NULL; if (s->top + 1 >= s->capacity) { s->capacity *= 2; s->data = realloc(s->data, sizeof(void *) * s->capacity); } return s->data[++s->top] = data; }