#include #include "stack.h" typedef struct _Stack { void** elems; int size; } Stack; Stack* stack_init() { Stack* s = malloc(sizeof(Stack)); s->size = 0; s->elems = NULL; return s; } void* stack_pop(Stack* stack) { if (stack_empty(stack)) return NULL; stack->size -= 1; void* elem = stack->elems[stack->size]; stack->elems[stack->size] = NULL; stack->elems = realloc(stack->elems, stack->size * sizeof(void*)); return elem; } void stack_push(Stack* stack, void* elem) { if (stack == NULL) return; stack->size += 1; stack->elems = realloc(stack->elems, stack->size * sizeof(void*)); stack->elems[stack->size - 1] = elem; } void* stack_peek(Stack* stack) { if (stack_empty(stack)) return NULL; return stack->elems[stack->size - 1]; } bool stack_empty(Stack* stack) { return (stack == NULL || stack->size == 0); } void** stack_clear(Stack** stack) { if (*stack == NULL) return NULL; void** elems = (*stack)->elems; free(*stack); *stack = NULL; return elems; }