diff options
author | HampusM <hampus@hampusmat.com> | 2021-12-11 20:18:16 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2021-12-11 20:18:16 +0100 |
commit | af4671acbc48446b0e0b3589b648854488f78e58 (patch) | |
tree | 46f6676c23b654749c7b173aa348f4c87f3b7044 /stack.c | |
parent | a2bd411d2ee0e3242fc4345a98501283bc749e1c (diff) |
refactor: fix formatting & move stack
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 |