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

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

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  }

 

转载于:https://www.cnblogs.com/LizG192/p/5334638.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值