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

  出现左括弧则进栈;

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

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

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

      否则表明表达式不匹配;

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

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

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

转载于:https://www.cnblogs.com/ABook/p/5401038.html

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

  1. C语言 数据结构 栈的应用(括号匹配)

    #include<stdio.h> #include<stdlib.h> #define MaxSize 10 #define true 1 #define false 0 t ...

  2. 数据结构—栈的应用(括号匹配、表达式求值、递归)

    建议将思维导图保存下来观看,或者点击这里在线观看

  3. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  4. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  5. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  6. 数据结构(二)——栈及实现、括号匹配

    一.栈的概念与特点 一种特殊的线性表,它的插入和删除运算均在同一端进行.这一端被称为栈顶,另一端为栈底,插入称为进栈,删除称为出栈.有后进先出的性质.栈顶top相当于顺序表中的size,即元素个数.关 ...

  7. 利用栈进行程序的括号匹配

    利用栈进行程序的括号匹配 程序代码: /** fanchen.cpp : 定义控制台应用程序的入口点.**/#include "stdafx.h" #include <ios ...

  8. (王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀、中缀和后缀)

    前面我们就说过,栈是一种先进后出的线性表,这种先进后出的特性就决定了它在一类场合或问题中会经常被用到--递归.考研数据结构中所涉及的利用栈结构解决递归问题或者考察栈结构特性的问题主要有这么几类 括号匹 ...

  9. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  10. 数据结构之栈的应用:括号匹配问题

    栈的应用 括号匹配问题: 原理: 代码实现: 括号匹配问题: 原理: 1.括号匹配成功的情况:栈为空 2.括号匹配失败的情况: a.下一个为右括号但是和栈顶左括号不匹配 b.下一个是右括号但栈以空 c ...

最新文章

  1. CentOS 7.4下Redis及集群的安装及配置
  2. HDU 2476 String painter (区间DP)
  3. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
  4. [CentOS] 打造vim环境
  5. python中getattr()的用法
  6. Java截取视频文件缩略图
  7. Chrome 45 减少了内存占用
  8. C语言图形库简单对比及EGE库的安装小手册
  9. SpringBoot:事件的发布和监听
  10. 重构java和js版_重构Javascript代码示例(重构前后对比)
  11. 安装搭配VUE使用的UI框架ElementUI
  12. GIF 屏幕录制工具
  13. Java 判断输入的是否为元音字母
  14. 靶基因高通量测序建库流程介绍
  15. Python点击Pycharm按钮Run的时候出现Type ‘manage.py help <subcommand>‘ for help on a specific subcommand.
  16. 《Python基础知识-4判断和循环语句》
  17. IText生成PDF
  18. 【一步一步学习VBA】Excel VBA 读取txt文件并写入Excel单元格(友好版)
  19. visual studio 调试python_visual studio code 里调试运行 Python代码
  20. 【刷题】——小红书三套卷

热门文章

  1. 解决在ubuntu 12.10安装vmware-tools实现文件共享问题
  2. ES+Redis+MySQL,这个高可用架构设计太顶了!
  3. HTTP API 设计指南
  4. Eclipse跌落神坛了。。
  5. 宝贝,后端接口如何提高性能?
  6. 带薪休假,运维汪的春天来了?
  7. 聊聊职场中的学历问题
  8. 为什么觉得今年工作特别难找?
  9. js求数组最大值方法汇总
  10. 总结的几个cocoapods的几个常见问题