#include "stack.h" #include #include // Error handler for stack errors void stack_error(int id) { switch (id) { case 0: printf("Error: Stack overflow\nBe kind and report this problem."); break; case 1: printf("Error: Stack underflow\nBe kind and report this problem."); break; } exit(1); } // Creates a new stack struct stack *create_stack(int capacity) { struct stack *pt = (struct stack *)malloc(sizeof(struct stack)); pt->max_size = capacity; pt->top = -1; pt->items = (int *)malloc(sizeof(int) * capacity); return pt; } // Adds a new item to a stack void stack_push(struct stack *pt, int x) { // Avoid a overflow by checking if the stack is full if (pt->top == pt->max_size - 1) stack_error(0); // Add an element and increase the top index pt->items[++pt->top] = x; } // Returns the topmost item of a stack int stack_peek(struct stack *pt) { // Check if the stack is empty if (pt->top == -1) stack_error(1); return pt->items[pt->top]; } // Deletes the topmost item of a stack int stack_pop(struct stack *pt) { // Check for a stack underflow if (pt->top == -1) stack_error(0); // Decrease the stack size by 1 and (optionally) return the popped element return pt->items[pt->top--]; }