typedef char elemtype;
typedef struct {
elemtype *a;
int top;
int capacity;
} Mystack;
bool mystackEmpty(Mystack* obj) {
if(obj->top==0)
{
return true;
}
return false;
}
void mystackCreate(Mystack* s) {
s->a=NULL;
s->top=0;
s->capacity=0;
}
void mystackPush(Mystack* obj, int x) {
if(obj->top==obj->capacity)
{
int newcapacity=obj->capacity==0?4:obj->capacity*2;
elemtype* tmp=(elemtype*)realloc(obj->a,newcapacity*sizeof(elemtype));
if(tmp==NULL)
{
perror("realloc fail");
return;
}
obj->a=tmp;
obj->capacity=newcapacity;
}
obj->a[obj->top]=x;
obj->top++;
}
int mystackPop(Mystack* obj) {
assert(!mystackEmpty(obj));
obj->top--;
return obj->a[obj->top];
}
elemtype mystacktop(Mystack* obj) {
assert(!mystackEmpty(obj));
return obj->a[obj->top-1];
}
void mystackFree(Mystack* obj) {
free(obj->a);
obj->top=0;
obj->capacity=0;
}
bool isValid(char * s){
Mystack S;
mystackCreate(&S);
char top;
while(*s)
{
if(*s=='('||*s=='{'||*s=='[')
{
mystackPush(&S,*s);
}
else
{
if(mystackEmpty(&S))
{
mystackFree(&S);
return false;
}
top=mystacktop(&S);
mystackPop(&S);
if((*s==')'&&top!='(')||(*s=='}'&&top!='{')||(*s==']'&&top!='['))
{
return false;
}
}
++s;
}
bool ret=mystackEmpty(&S);
mystackFree(&S);
return ret;
}
注意:当栈为空的时候(包括匹配判断的中途栈为空的情况)返回之前要释放内存,否则会导致内存泄漏