typedef struct {
int itop; /*数组元素个数*/
int min_num; /*当前最小的数值*/
int *data_buf_p; /*存储数组元素的栈*/
int *min_data_buf_p; /*存储数组当前最小值得栈*/
} MinStack;
#define MAXSIZE 1000
/** initialize your data structure here. */
MinStack* minStackCreate() {
MinStack *obj = NULL;
obj = (MinStack *) malloc( sizeof(MinStack));
if(NULL == obj){
return NULL;
}
obj->data_buf_p = (int*) malloc(MAXSIZE * sizeof(int));
if(NULL == obj->data_buf_p){
return NULL;
}
obj->min_data_buf_p = (int*) malloc(MAXSIZE * sizeof(int));
if(NULL == obj->min_data_buf_p){
return NULL;
}
obj->itop = 0;
return obj;
}
void minStackPush(MinStack* obj, int x) {
if(obj->itop >= MAXSIZE){
return;
}
if(0 == obj->itop || x < obj->min_num){
obj->min_num = x;
}
obj->data_buf_p[obj->itop] = x;
obj->min_data_buf_p[obj->itop] = obj->min_num;
obj->itop++;
}
void minStackPop(MinStack* obj) {
if(obj->itop == 0){
return;
}
obj->itop--;
if(0 == obj->itop){
obj->min_num = 0;
}else{
obj->min_num = obj->min_data_buf_p[obj->itop-1];
}
}
int minStackTop(MinStack* obj) {
if(obj->itop == 0){
return 0;
}
return obj->data_buf_p[obj->itop-1];
}
int minStackGetMin(MinStack* obj) {
if(obj->itop == 0){
return 0;
}
return obj->min_data_buf_p[obj->itop-1];
}
void minStackFree(MinStack* obj) {
free(obj->data_buf_p);
obj->data_buf_p = NULL;
free(obj->min_data_buf_p);
obj->min_data_buf_p = NULL;
free(obj);
obj = NULL;
}