码迷,mamicode.com
首页 > 其他好文 > 详细

【数据结构】栈的应用——括号匹配问题

时间:2020-03-20 14:27:52      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:结构   har   oid   ISE   数据   www   ++   htm   not   

括号匹配问题:

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

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

利用堆栈的思路:
建立一个堆栈,然后遍历字符串,如果是‘(‘,‘{‘.‘[‘,则入栈,否则判断当前字符串和栈顶元素是否是一对括号;要注意的是,需要提前判断栈是否为空,为空的时候取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\r\n", 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

 

【数据结构】栈的应用——括号匹配问题

标签:结构   har   oid   ISE   数据   www   ++   htm   not   

原文地址:https://www.cnblogs.com/utank/p/12531389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!