blob: 3c1ab194fe28692f867ce4b3a2cdd7eb5bda31aa (
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
36
37
38
39
40
41
42
|
#include <stddef.h>
#include <stdlib.h>
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;
}
|