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


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

      出现左括弧则进栈;

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

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

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

          否则表明表达式不匹配;

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

    实现代码如下(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 }

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

  • 相关阅读:
    四则运算试题生成,结对
    3 词频统计
    20190912-1 每周例行报告
    20190912-2 命令行
    每周例行报告
    作业要求 20190919-1 每周例行报告
    作业要求20190919-4 单元测试,结对
    作业要求 20190919-6 四则运算试题生成,结对
    作业要求20190919-5 代码规范,结对要求
    作业要求20190919-2 功能测试
  • 原文地址:https://www.cnblogs.com/ABook/p/5401038.html
Copyright © 2020-2023  润新知