思路 因为题目要求可以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) ;
}