- 思路
因为题目要求可以getmin,所以可以用两个栈解决,一个栈储存push进来元素,一个栈储存比较后比mintop还要小的元素,虽然内存消耗有点大,但是我是为了练习一下栈也就无所谓了 - 错误
结构体也要记得分配内存啊啊啊,找了半天的毛病才找出来
照葫芦画瓢把realloc写成了malloc,元素突然就全变了┭┮﹏┭┮
typedef struct {
int top;
int *base;
int peak;
int *min;
int stacksize;
} MinStack;
MinStack* minStackCreate() {
MinStack *s = (MinStack*)malloc(sizeof(MinStack));
s->base = (int *)malloc(100 * sizeof(int));
s->min = (int *)malloc(100 * sizeof(int));
s->stacksize = 100;
s->top = 0;
s->peak = 0;
return s;
}
void minStackPush(MinStack* obj, int x) {
if((obj->top+1) == obj->stacksize){
obj->base = (int *)realloc(obj->base, (obj->stacksize+2) * sizeof(int));
obj->min = (int *)realloc(obj->min, (obj->stacksize+2) * sizeof(int));
obj->stacksize++;
}
if(obj->peak==0){
obj->peak++;
obj->min[obj->peak] = x;
}
else{
if(x <= obj->min[obj->peak]){
obj->peak++;
obj->min[obj->peak] = x;
}
}
obj->base[++obj->top] = x;
}
void minStackPop(MinStack* obj) {
if(obj->top <= 0){
return NULL;
}
if(obj->base[obj->top] == obj->min[obj->peak]){
obj->peak--;
}
obj->top--;
}
int minStackTop(MinStack* obj) {
if(obj->top <= 0)
return NULL;
return obj->base[obj->top];
}
int minStackGetMin(MinStack* obj) {
if(obj->peak <= 0)
return NULL;
return obj->min[obj->peak];
}
void minStackFree(MinStack* obj) {
free(obj);
}