栈的应用之括号匹配的检验

Posted 北方暴雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的应用之括号匹配的检验相关的知识,希望对你有一定的参考价值。

栈的实际应用很多,其中括号匹配是很常见的例子。下面列出基本算法和源代码,标明注释以便日后复习和翻阅。

Description:

利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的

顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上

述括号的表达式,检验括号是否配对。本题给出部分check()函数,要求将check()函数补充完整,并完成

整个程序。

算法:

    

 

代码:

 1 void check()
 2  { // 对于输入的任意一个字符串,检验括号是否配对
 3    SqStack s;
 4    SElemType ch[80],*p,e;
 5    if(InitStack(s)) // 初始化栈成功
 6    {
 7      scanf("%s",ch);
 8      p=ch;
 9      while(*p) // 没到串尾
10        switch(*p)
11   {
12      case \'(\':
13      case \'[\':Push(s,*p);
14                 p++;
15                   break; // 左括号入栈,且p++,读下一个字符
16      case \')\':
17      case \']\':if(!StackEmpty(s)) // 栈不空,如果为空的话返回0;!0=1
18                   {
19                    Pop(s,e); // 弹出栈顶元素
20                     if(*p==\')\'&&e!=\'(\'||*p==\']\'&&e!=\'[\')
21                                                 // 弹出的栈顶元素与*p不配对
22 {
23                       printf("isn\'t matched pairs\\n");
24                       exit(ERROR);
25                     }
26                     else
27                     {
28                       p++;//读取下一个字符
29                       break; // 跳出switch语句
30                     }
31                   }
32                   else // 栈空
33                   {
34                     printf("lack of left parenthesis\\n");
35                     exit(ERROR);
36                   }
37          default: p++; // 其它字符不处理,指针向后移
38        }
39      if(StackEmpty(s)) // 字符串结束时栈空
40        printf("matching\\n");
41      else
42        printf("lack of right parenthesis\\n");
43    }
44  }

 

以上是关于栈的应用之括号匹配的检验的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-栈的使用之括号匹配校验

数据结构-栈的使用之括号匹配校验

数据结构-栈的使用之括号匹配校验

数据结构(C语言) 栈的应用之括号匹配

用栈检测括号匹配

(王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀中缀和后缀)