stack.c (742B)
1 #include <stddef.h> 2 #include <stdlib.h> 3 4 typedef struct stack { 5 int *sp; 6 int value; 7 int (*pop)(struct stack *stack); 8 void (*push)(struct stack *stack, int value); 9 void (*free)(struct stack *strack); 10 int *stack; 11 } stack; 12 13 int pop(stack *stack){ 14 stack->sp -= sizeof(int); 15 int i = *stack->sp; 16 *stack->sp = stack->value; 17 return i; 18 } 19 20 void push(stack *stack, int value){ 21 *stack->sp = value; 22 stack->sp += sizeof(int); 23 } 24 25 void deinitstack(stack *stack){ 26 free(stack->stack); 27 free(stack); 28 stack = NULL; 29 } 30 31 stack *initstack(int value, size_t size){ 32 stack *s = malloc(sizeof(stack)); 33 s->stack = calloc(0, size*sizeof(int)); 34 s->sp = s->stack; 35 s->value = value; 36 s->pop = &pop; 37 s->push = &push; 38 s->free = &deinitstack; 39 40 return s; 41 } 42