diff options
author | thing 1 <thing1@seacrossedlovers.xyz> | 2025-01-10 17:38:56 +0000 |
---|---|---|
committer | thing 1 <thing1@seacrossedlovers.xyz> | 2025-01-10 17:38:56 +0000 |
commit | e46e08fceff29622399855043554635d6e33c3c4 (patch) | |
tree | b8074819364bd54b54b4798f07002fe234c506ac /stack.c |
init commit
Diffstat (limited to 'stack.c')
-rw-r--r-- | stack.c | 45 |
1 files changed, 45 insertions, 0 deletions
@@ -0,0 +1,45 @@ +#include <stdlib.h> + +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); +} |