diff options
Diffstat (limited to 'stack.c')
-rw-r--r-- | stack.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -0,0 +1,41 @@ +#include "stack.h" +#include <stdlib.h> + +// 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--]; +}
\ No newline at end of file |