forked from msiu-prog/long_arithmetic
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstack.c
More file actions
98 lines (83 loc) · 1.76 KB
/
stack.c
File metadata and controls
98 lines (83 loc) · 1.76 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <malloc.h>
#include "stack.h"
struct mp_stack *mp_stack_create(int length) {
struct mp_stack *st;
st = (struct mp_stack *)malloc(sizeof(struct mp_stack));
if(st == NULL) {
// no memory error
return NULL;
}
st->array = NULL;
st->alength = 0;
st->size = 0;
st->head = (-1);
return st;
}
void mp_stack_destroy(struct mp_stack *st) {
if(st != NULL) {
if(st->array != NULL){
free(st->array);
// st->alength = 0;
// st->size = 0;
// st->head = (-1);
}
free(st);
}
}
void mp_stack_initialize(struct mp_stack *st) {
if(st != NULL) {
st->array = NULL;
st->alength = 0;
st->size = 0;
st->head = (-1);
}
}
int mp_stack_is_empty(struct mp_stack *st) {
if(st != NULL) {
return (st->size == 0);
}
return 1;
}
void mp_stack_clear(struct mp_stack *st) {
if(st != NULL) {
st->size = 0;
st->head = (-1);
st->array = realloc(st->array, STACK_LENGTH*sizeof(void *));
}
}
void mp_stack_push(struct mp_stack *st, void *obj) {
if(st != NULL) {
if(st->size == st->alength){
st->array = realloc(st->array,
(st->alength+STACK_INCREMENT)*sizeof(void *));
if(st->array == NULL) {
// no memory error
}
}
st->array[st->head+1] = obj;
st->head += 1;
st->size += 1;
} else {
// must generate some error
}
}
void *mp_stack_pop(struct mp_stack *st) {
if(st != NULL && st->size != 0) {
st->size -= 1;
st->head -= 1;
return (st->array)[st->head+1];
}
return NULL;
}
void *mp_stack_top(struct mp_stack *st) {
if(st != NULL && st->size != 0) {
return (st->array)[st->head];
}
return NULL;
}
int mp_stack_size(struct mp_stack *st) {
if(st != NULL) {
return st->size;
}
return 0;
}