数据结构判断表达式括号是否匹配


问题:假设一个算术表达式只有“()","[]","{}",这3种类型的括号,编写一个算法判断表达时括号是否匹配,表达式以“\0"结尾。

算法思想:括号匹配是栈的一个典型的应用,当扫描到左括号时,将其入栈,当扫描到右括号时,从栈中弹出一个元素,同时判断是否匹配(如果栈为空,弹出的元素为空,此时一定不匹配),所以在遍历表达式的时候不用判断栈是否为空。按以上思想循环遍历表达式,如果扫描到"\0”字符时,并且,栈为空,则括号匹配。

代码如下:

 1 bool BracketsCheck(char *str)
 2 {
 3     InitStack(S);   //初始化栈
 4     int i=0;
 5     while(str[i]!='\0')
 6     {
 7         switch(str[i])
 8         {   //左括号入栈
 9             case '(':Push(S,str[i]);break;
10             case '[':Push(S,str[i]);break;
11             case '{':Push(S,str[i]);break;
12             //右括号出栈,并检查是否匹配
13             case ')':Pop(S,e);
14             if(e!='(')  return false;   
15             break;
16             
17             case ']':Pop(S,e);
18             if(e!='[')  return false;   
19             break;
20             
21             case '}':Pop(S,e);
22             if(e!='{')  return false;   
23             break;
24             default:
25                 break;
26         }//switch
27         i++;  //扫描下一个字符
28     }//while
29     if(!IsEmpty(s))   //栈不为空
30     {
31          printf("括号不匹配!\n");
32          return false;
33     }
34     else
35         {
36             printf("括号匹配!\n");
37              return true;
38         }
39 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM