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# imgage图片转base64字符/base64字符串转图片另存成
    base64编码的 文件 图片
    CSS
    Exception has been thrown by the target of an invocation 网站报错
    高效通用分页存储过程 多表查询
    JavaScript 知识记录
    JQuery 全选 取消
    ELK(elasticsearch+logstash+kibana)入门到熟练-从0开始搭建日志分析系统教程
    ELK- elasticsearch 讲解,安装,插件head,bigdesk ,kopf,cerebro(kopf升级版)安装
  • 原文地址:https://www.cnblogs.com/utank/p/12531389.html
Copyright © 2011-2022 走看看