From e46e08fceff29622399855043554635d6e33c3c4 Mon Sep 17 00:00:00 2001 From: thing 1 Date: Fri, 10 Jan 2025 17:38:56 +0000 Subject: init commit --- stack.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 stack.c (limited to 'stack.c') diff --git a/stack.c b/stack.c new file mode 100644 index 0000000..c07c7fc --- /dev/null +++ b/stack.c @@ -0,0 +1,45 @@ +#include + +typedef struct stack stack; + +typedef struct stack { + char *tape; + int len; + char *ptr; +} stack; + +stack *push(stack *s, char c){ + if (s == NULL) { + stack *outstack = malloc(sizeof(stack)); + outstack->tape = malloc(1); + outstack->tape[0] = c; + outstack->ptr = outstack->tape; + outstack->len = 1; + return outstack; + } + s->len++; + s->ptr++; + s->tape = realloc(s->tape, s->len); + *s->ptr = c; + + return s; +} + +char pop(stack *s){ + char c = *s->ptr; + *s->ptr = 0; + s->len--; + s->ptr--; + s->tape = realloc(s->tape, s->len); + + return c; +} + +char peek(stack *s){ + return *s->ptr; +} + +void cleanstack(stack *s){ + free(s->tape); + free(s); +} -- cgit v1.2.3