typedef struct {
int data[20000];
int min[20000];
int top;
int mintop;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate(int maxSize) {
MinStack * stack = (MinStack*)malloc(sizeof(MinStack));
stack->top = -1;
stack->mintop = -1;
return stack;
}
void minStackPush(MinStack* obj, int x) {
if(obj->top>19999)
return ;
obj->top++;
obj->data[obj->top]=x;
if(obj->mintop == -1 || (obj->mintop>-1 && obj->min[obj->mintop] >= x))
{
obj->mintop++;
obj->min[obj->mintop] = x;
}
}
void minStackPop(MinStack* obj) {
if(obj->top==-1)
return ;
int topNum = obj->data[obj->top];
obj->top--;
if(topNum==obj->min[obj->mintop])
obj->mintop--;
}
int minStackTop(MinStack* obj) {
return obj->data[obj->top];
}
int minStackGetMin(MinStack* obj) {
return obj->min[obj->mintop];
}
void minStackFree(MinStack* obj) {
free(obj);
}