[数据结构]栈问题之括号匹配
bool isValid(char* s)
{
ST st;
StackInit(&st);
while (*s)
{
if (*s == '(' || *s == '[' || *s == '{')//遇到左括号就入栈
{
STPush(&st,*s);
s++;
}
else//遇到右括号,出栈进行匹配
{
if (STEmpty(&st))//如果有括号数目比左括号多
{
StackDestroy(&st);
return false;
}
char top = STTop(&st);
STPop(&st);
if( (*s == ')' && top != '(')|| (*s == ']' && top != '[')|| (*s == '}' && top != '{'))//匹配就继续走,如果一个不匹配就直接false
{
StackDestroy(&st);
return false;
}
else
{
s++;
}
}
}
bool ret = STEmpty(&st);//如果栈为空才是匹配的,栈不为空那证明左括号多于右括号
StackDestroy(&st);
return true;
}
代码中遇到的函数具体实现请看作者之前的文章[数据结构]栈详解有讲过