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

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

时间:2016-03-29 21:10:50      阅读:806      评论:0      收藏:0      [点我收藏+]

标签:

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

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  }

 

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

标签:

原文地址:http://www.cnblogs.com/LizG192/p/5334638.html

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