school

thing1's amazing school repo
Log | Files | Refs | Submodules | README

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