From 3564e513623bb3fc4d528d3d29df9aa91dae1396 Mon Sep 17 00:00:00 2001 From: thing1 Date: Mon, 7 Oct 2024 13:01:30 +0100 Subject: did some electronics and comp sci work --- comp/work/37/stack.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 comp/work/37/stack.c (limited to 'comp/work/37/stack.c') diff --git a/comp/work/37/stack.c b/comp/work/37/stack.c new file mode 100644 index 0000000..3c1ab19 --- /dev/null +++ b/comp/work/37/stack.c @@ -0,0 +1,42 @@ +#include +#include + +typedef struct stack { + int *sp; + int value; + int (*pop)(struct stack *stack); + void (*push)(struct stack *stack, int value); + void (*free)(struct stack *strack); + int *stack; +} stack; + +int pop(stack *stack){ + stack->sp -= sizeof(int); + int i = *stack->sp; + *stack->sp = stack->value; + return i; +} + +void push(stack *stack, int value){ + *stack->sp = value; + stack->sp += sizeof(int); +} + +void deinitstack(stack *stack){ + free(stack->stack); + free(stack); + stack = NULL; +} + +stack *initstack(int value, size_t size){ + stack *s = malloc(sizeof(stack)); + s->stack = calloc(0, size*sizeof(int)); + s->sp = s->stack; + s->value = value; + s->pop = &pop; + s->push = &push; + s->free = &deinitstack; + + return s; +} + -- cgit v1.2.3