forked from alt-romes/programmer-calculator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnumberstack.c
68 lines (45 loc) · 1.28 KB
/
numberstack.c
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdlib.h>
#include "numberstack.h"
#include "xmalloc.h"
#include "global.h"
numberstack* numbers;
// Allocate and set up numberstack
numberstack * create_numberstack(int max_size) {
numberstack* s;
s = xmalloc(sizeof(numberstack));
s->elements = xmalloc(max_size * sizeof(long long));
s->size = 0;
s->max_size = max_size;
return s;
}
static numberstack * resize_numberstack(numberstack* s) {
s->max_size *= 2;
s->elements = xrealloc(s->elements, s->max_size * sizeof(long long));
return s;
}
// Pop element from the top of the stack (return and remove element)
long long * pop_numberstack(numberstack* s) {
if (s->size == 0)
return NULL;
return &s->elements[--s->size];
}
// Return the element at the top of the stack without removing it
long long * top_numberstack(numberstack* s) {
if (s->size == 0)
return NULL;
return &s->elements[s->size-1];
}
// Push number to the top of the stack
void push_numberstack(numberstack* s, long long value) {
if (s->size == s->max_size)
resize_numberstack(s);
s->elements[s->size++] = value;
}
// Clear the stack
void clear_numberstack(numberstack* s) {
s->size = 0;
}
void free_numberstack(numberstack *s) {
xfree(s->elements);
xfree(s);
}