zoukankan      html  css  js  c++  java
  • 【数据结构】栈的应用——括号匹配问题

    括号匹配问题:

    给一个字符串,其中包含小括号、中括号、大括号,求该字符串中的括号是否匹配。

    例如:
    ()()[]{}    匹配
    ([{()}])    匹配
    [](               不匹配
    [(])              不匹配

    利用堆栈的思路:
    建立一个堆栈,然后遍历字符串,如果是'(','{'.'[',则入栈,否则判断当前字符串和栈顶元素是否是一对括号;要注意的是,需要提前判断栈是否为空,为空的时候取top是违法的的,所以只要为空就入栈,然后执行下一次循环,而且,只要循环过程中出现一次栈顶元素和当前元素不匹配的情况,就可以跳出循环返回false了。

     1 int isBracket(char left,char right)
     2 {
     3     if(left == '(' && right == ')')   return 1;
     4     if(left == '[' && right == ']')   return 1;
     5     if(left == '{' && right == '}')   return 1;
     6     
     7     return 0;
     8 }
     9 int isValidParentheses( char *str )
    10 {
    11     int len;
    12     int i;
    13     T_Stack stack;
    14     int buf[100];
    15     int tmp;
    16 
    17     StackInit( &stack, buf, sizeof(buf)/sizeof(buf[0]));
    18 
    19     len = strlen( str );
    20 
    21     for( i = 0; i < len; i++ )
    22     {
    23         if( StackIsEmpty( &stack ) )
    24         {
    25             StackPush( &stack, str[i] );
    26             continue;
    27         }
    28 
    29         StackTop( &stack, &tmp );
    30 
    31         if( str[i] == '(' || str[i] == '[' || str[i] == '{')
    32         {
    33             StackPush( &stack, str[i]);
    34         }
    35         else if( isBracket( tmp, str[i] ) )
    36         {
    37             StackPop( &stack, &tmp );
    38         }
    39         else
    40         {
    41             return 0;
    42         }
    43     }
    44 
    45     return ( StackIsEmpty( &stack ) );
    46 }
    47 
    48 int main( void )
    49 {
    50     char *str[] = {
    51         "()()[][]{}", "[(])", "[]( ", "([{()}])", "(([{()}]) "
    52     };
    53     int i;
    54     
    55     for( i = 0; i < sizeof(str)/sizeof(str[0]); i++ )
    56     {
    57         printf("%s
    ", isValidParentheses(str[i]) ? "match" : "not match");
    58     }
    59 
    60     system("pause");
    61 
    62     return 0;
    63 }

    参考引用:

    https://www.jianshu.com/p/be1dc368200d

    https://www.cnblogs.com/hedeyong/p/7841548.html

  • 相关阅读:
    C#中泛型学习笔记
    ASP.NET C#各种数据库连接字符串大全——SQLServer、Oracle、Access
    单点登录SSO
    Package Manager Console 向VS2010安装 EntityFramework
    JavasSript中类的实现(1)
    Java线程实现提供者消费者模式
    MySQL插入语句解决唯一键约束
    【BZOJ4000】【LOJ2104】【TJOI2015】棋盘 (状压dp + 矩阵快速幂)
    【AGC005F】Many Easy Problems (NTT)
    【Luogu4630】【APIO2018】 Duathlon 铁人两项 (圆方树)
  • 原文地址:https://www.cnblogs.com/utank/p/12531389.html
Copyright © 2011-2022 走看看