/
155_min_stack_origin.c
47 lines (41 loc) · 1.03 KB
/
155_min_stack_origin.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
typedef struct {
int max_size;
int cur_size;
int* data;
} MinStack;
void minStackCreate(MinStack *stack, int maxSize) {
stack->max_size = maxSize;
stack->cur_size = 0;
}
void minStackPush(MinStack *stack, int element) {
if ( stack->cur_size < stack->max_size ) {
stack->data [ stack->cur_size ] = element;
stack->cur_size += 1;
}
}
void minStackPop(MinStack *stack) {
if ( stack->cur_size > 0 ) {
stack->cur_size -= 1;
}
}
int minStackTop(MinStack *stack) {
if ( stack->cur_size > 0 ) {
return * ( stack->data + stack->cur_size - 1 );
}
}
int minStackGetMin(MinStack *stack) {
int cur_min = minStackTop ( stack ) ;
int temp_size = stack->cur_size;
while ( temp_size > 0 ) {
if ( stack->data [ temp_size - 1 ] < cur_min ) {
cur_min = stack->data [ temp_size - 1 ];
}
temp_size -= 1;
}
return cur_min;
}
void minStackDestroy(MinStack *stack) {
while ( stack->cur_size > 0 ) {
minStackPop ( stack );
}
}