[数据结构]栈问题之括号匹配

[数据结构]栈问题之括号匹配_第1张图片

[数据结构]栈问题之括号匹配_第2张图片

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;
}

代码中遇到的函数具体实现请看作者之前的文章[数据结构]栈详解有讲过

你可能感兴趣的:(数据结构)