首页 > 其他 > 详细

数据结构-栈的实现之括号匹配检测

时间:2016-04-17 16:01:48      阅读:228      评论:0      收藏:0      [点我收藏+]

假设表达式中只允许两种括号:()、{};
正确表达顺序为:()或{}或({})或{({}{})}的形势;如{(}或(})或({)}的表达形势均不对。
算法的设计思想:

  出现左括弧则进栈;

  出现右括弧则首先检测栈是否为空,

    若栈空则表明此右括弧多余,表达式不匹配。

    否则和栈顶数据比较,若匹配则栈顶出栈。

      否则表明表达式不匹配;

  最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配。

实现代码如下(Stack.h头文件为之前写的数据结构-栈的顺序结构中写的数组那个方法,用到了里面栈的结构和连个基本栈操作)

 1 void Matching(char e[])
 2 {
 3     Stack S;
 4     InitStack(S);
 5     unsigned int i = 0, state = 1;
 6     char z;
 7     while((int)(i <= strlen(e)) && state && e[i] != \0)    //结束条件 超出数组长度或state为0或字符串结束
 8     {
 9         switch(e[i])
10         {
11         case (:
12         case {:
13             Push(S,e[i]);    //遇到({则进栈
14             i++;
15             break;
16         case ):
17             GetTop(S,z);
18             if(!StackEmpty(S) && z == ()    //遇到)则判断栈顶是不是(,是的话出栈,不是则不匹配
19             {
20                 Pop(S,z);
21                 i++;
22             }
23             else
24                 state = 0;
25             break;
26         case }:
27             GetTop(S,z);
28             if(!StackEmpty(S) && z == {)//遇到}则判断栈顶是不是{,是则出栈,不是则不匹配
29             {
30                 Pop(S,z);
31                 i++;
32             }
33             else
34                 state = 0;
35             break;
36         }
37     }
38     if(StackEmpty(S) && state)    //空栈且state不为0则全部匹配
39         printf("括号全部匹配");
40     else
41         printf("括号不匹配");
42 }

主函数测试代码如下:

1 void main()
2 {
3     char e[20];
4     printf("请输入括号:");
5     scanf("%s",e);
6     Matching(e);
7 }

测试只要输入表达式格式正确,则匹配结果是正确的。

数据结构-栈的实现之括号匹配检测

原文:http://www.cnblogs.com/ABook/p/5401038.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!