summaryrefslogtreecommitdiff
path: root/comp/work/42/rpn/stack.c
blob: 03114045bfa92ca61455aa89d70afaf3e623fd50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stddef.h>
#include <stdlib.h>

typedef struct stack {
	int *sp;
	int value;
	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;
	return s;
}