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

  • 相关阅读:
    一个自动打补丁的脱机程序
    OPC 学习交流感想
    串口标准,说说流控制(RTS/CTS/DTR/DSR 你都明白了吗?)
    asp.net中调用COM组件发布IIS时常见错误 80070005解决方案
    可运行XP的最少后台服务配置
    MapGIS 7.0 SP2 企业版 & MapGIS 7.1IMS
    简单认识一下S60系统
    常用正则表达式
    图像处理:遮罩
    office2003中WORD中visio图无法打印中文问题解决方法
  • 原文地址:https://www.cnblogs.com/utank/p/12531389.html
Copyright © 2011-2022 走看看