所谓括号校验匹配其实质是对多种类型括号正确配对的校验(包括:()、[]、{})即([])或者[()]为正确的表达式,如果出现交叉则匹配失败,如[(])或([())则为不正确格式。
该程序也运用了栈的思想。若是左括号则入栈,若是右括号则看是否和当前栈顶元素是否匹配。若是则出栈,不是则当前表达式括号不匹配。

程序思想:
1.初始设置一个空栈,顺序读入括号。
2.若是右括号,则使置于栈顶的元素出栈与之匹配,若是括号序列不匹配,则退出程序
3.若是左括号,则将元素压入栈中,算法结束时,栈为空,否则括号序列不匹配

以下为示例代码:

//栈应用之校验括号的匹配#include "stdafx.h"
#include "string.h"#define ElementType char
#define MaxSize 10
//定义结构体
typedef struct {ElementType data[MaxSize];//数据域int top;//栈顶指针int size;//栈当前容量
}SqStack;/*
初始化栈
*/
void InitStack(SqStack &s) {s.top = -1;s.size = 0;
}/*
判断栈是否为空
*/
bool StackEmpty(SqStack s) {if (s.size == 0) {return true;}return false;
}
/*
入栈
*/
bool PushStack(SqStack &s,ElementType e) {//if(s.top==MaxSize-1)if (s.size == MaxSize) {//栈满return false;}s.top++;s.data[s.top] == e;s.size++;return true;
}
/*
出栈
*/
ElementType PopStack(SqStack &s) {//if(s.top==-1)if (s.size==0) {//栈空return NULL;}ElementType e = s.data[s.top];s.top--;s.size--;return e;
}
/*
校验括号是否匹配
*/
bool CheckMatch(char *str) {SqStack stack;InitStack(stack);int len = strlen(str);for (int i = 0; i < len; i++){char x = str[i];ElementType e;switch (x) {case '(':PushStack(stack, x);break;case '[':PushStack(stack, x);break;case '{':PushStack(stack, x);break;case ')':e = PopStack(stack);if (e != '(') {return false;}break;case ']':e = PopStack(stack);if (e != '[') {return false;}break;case '}':e = PopStack(stack);if (e != '{') {return false;}break;}}bool b = StackEmpty(stack);if (b) {return true;}return false;
}void main() {char str[] = "[({})]";bool b = CheckMatch(str);if (b) {printf_s("匹配成功");}else{printf_s("匹配失败");}
}

数据结构-栈在括号匹配中的应用相关推荐

  1. 栈在括号匹配中的应用

    括号匹配问题 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意即()或[([][])]等均为正确的格式,[(]或([())或(()]均为不正确的格式. void test() {int ...

  2. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    利用顺序栈解决括号匹配问题(c++)-- 数据结构 参考文章: (1)利用顺序栈解决括号匹配问题(c++)-- 数据结构 (2)https://www.cnblogs.com/yi2105/p/106 ...

  3. python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...

  4. C++ 栈的括号匹配

    总结归纳 算法思想: 设置一个空栈,顺序读取括号.读取左括号时,将括号入栈:读取右括号时,弹出栈顶元素,栈顶即是与之匹配的最近的左括号. 匹配不成功的三种情况:(1)读取右括号时,此时栈空,没有与之匹 ...

  5. 六十三、栈在括号匹配和表达式求值中的应用

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 文章目录 括号匹配 数 ...

  6. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  7. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

  8. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  9. python用栈实现括号匹配问题

    问题描述: 给定一个字符串文字,里面可能含有"()","[]","{}"三种 括号,判断字符串中的括号是否都成对出现*** 思路分析: 如果 ...

最新文章

  1. postman登录鉴权之接口测试
  2. 微信tocken后台后台保存方法
  3. python爬虫教程书-Python 爬虫:把廖雪峰教程转换成 PDF 电子书
  4. Android Service的使用方法 音乐播放器实例
  5. Linux学习笔记6
  6. win7-64bit下基于VMware12.5安装rhel-server-6.3-i386
  7. spss三次指数平滑_17 统计学:SPSS基础
  8. pycharm不同py文件共享参数_PyCharm安装笔记
  9. 怎么在html使用百度商桥,电脑版网站如何添加爱番番(原:百度商桥)
  10. 接口测试并不只是测试参数和返回值
  11. 【Spring Cloud 系列】 二、Spring Cloud Eureka 的第一印象
  12. java十六进制与字符串_JAVA十六进制与字符串的转换方法
  13. 手把手教你用R语言制作网络爬虫机器人(一)
  14. CUDA学习(十一) 利用npp做图像处理
  15. hbase snappy 安装_hbase自带snappy压缩测试出错
  16. win10分区工具下载
  17. 简述计算机软件与硬件,简述计算机硬件与软件的关系。 - 问答库
  18. DS5000神奇的FDE全磁盘加密技术
  19. 仿微信做个极速二维码扫描功能
  20. linux上同步日历的,Linux命令行上如何使用日历详解

热门文章

  1. 网页设计上机考试原题_《网页设计》上机考试试题
  2. mysql 汇总行_MySQL查询汇总行的值并对结果进行排序?
  3. cassandra随机获取数据,Cassandra适合写入和少读,HBASE随机读取写入
  4. GCC编译过程与动态链接库和静态链接库
  5. golang语言学第四课:循环
  6. SQL Serever学习7——数据表2
  7. Android Studio经常使用配置及使用技巧(二)
  8. AssetBundle Workflow
  9. JMeter入门(3):录制JMeter脚本
  10. Backbone.js源码解读(转载)