#include "stack.h" #include // Create a new stack struct stack *new_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; } // Add 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) err(0); // Add an element and increase the top index pt->items[++pt->top] = x; } // Get the topmost item of a stack int stack_peek(struct stack *pt) { // Check if the stack is empty if (pt->top == -1) err(1); return pt->items[pt->top]; } // Remove the topmost item of a stack int stack_pop(struct stack *pt) { // Check for a stack underflow if (pt->top == -1) err(0); // Decrease the stack size by 1 and (optionally) return the popped element return pt->items[pt->top--]; }