zoukankan      html  css  js  c++  java
  • 数据结构-栈的实现之括号匹配检测

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

      出现左括弧则进栈;

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

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

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

          否则表明表达式不匹配;

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

    实现代码如下(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] != '')    //结束条件 超出数组长度或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 }

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

  • 相关阅读:
    Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
    eclipse 下找不到或无法加载主类的解决办法
    将博客搬至CSDN
    java接口中定义成员变量
    重写与重载
    多位数每一位个系数:个位num%10;十位num/10%10.......
    输出 n=6 的三角数字阵(JAVA基础回顾)
    二维数组的遍历之查漏补缺
    For循环打印正三角,倒三角,菱形
    JAVA的continue用法
  • 原文地址:https://www.cnblogs.com/ABook/p/5401038.html
Copyright © 2011-2022 走看看