括号匹配问题

  • 问题:假设表达式中括号可以任意嵌套,例如【()【()】】都是合法的。但是要求括号必须成对出现,像【(】)或者(【))的形式都是非法。编写一个程序,从终端输入一组括号,以字符 ‘#’ 为结束标志,判断输入的括号是否匹配合法。
  • 解决思路:
  • 1、首先输入1个字符,当该字符不是 ’#‘ 时,程序进入循环中。
  • 2、进入循环之后,首先判断栈是否为空。如果栈为空,则说明用户输入的括号字符是第一个,因此将他保存在栈中。如果栈不为空,要求将栈顶元素取出,判断栈顶元素是否刚才输入的括号字符相匹配。如果匹配,则继续执行下一个字符;如果不匹配,则必须先将刚才取出的栈顶元素重新入栈,再将刚才输入的括号也入栈,然后再输入下一个字符。
  • 3、重复上面的操作,直到输入结束标志 ’#‘ 为止。

先封装一个栈

#pragma once
#include<assert.h>
#include<stdlib.h>//1. 封装栈的基本操作
建议:静态
typedef char SDataType;#define MAXSIZE 100 typedef struct Stack
{SDataType _array[MAXSIZE];int _top; // 标记栈顶(栈中元素的个数)
}Stack;void StackInit(Stack* ps)
{assert(ps);ps->_top = 0;
}void StackPush(Stack* ps, SDataType data)
{assert(ps != NULL);if (MAXSIZE == ps->_top)return;ps->_array[ps->_top] = data;ps->_top++;
}
void StackPop(Stack* ps)
{assert(ps != NULL);if (StackEmpty(ps))return;ps->_top--;}SDataType StackTop(Stack* ps)
{assert(ps != NULL);return ps->_array[--(ps->_top)];
}int StackSize(Stack* ps)
{assert(ps);return ps->_top;
}int StackEmpty(Stack* ps)
{if (ps->_top == 0)return 1;elsereturn 0;
}

思路:括号匹配的主要思路

#pragma once
#include"stack.h"2. 栈的应用
//用栈解决括号的匹配问题
int match(char a, char b)
{if ((a == '( ' && b == ')') || (a == '['&&b == ']') || (a == '{'&&b == '}'))return 1;else return 0;
}int main()
{Stack stack;char c, e;StackInit(&stack);scanf("%c", &c);while (c != '#'){if (StackEmpty(&stack))StackPush(&stack, c);else{e = StackTop(&stack);if (!match(e, c))StackPush(&stack, c);elseStackPop(&stack, e);}scanf("%c", &c);}if (StackEmpty(&stack))printf("The brackets are matched!\n");elseprintf("The brackets are not matched!\n");system("pause");
}

代码经过测试,测试正确。如有问题,还请大佬们指点指点。

栈应用—括号匹配问题相关推荐

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

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

  2. C++ 栈的括号匹配

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

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

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

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

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

  5. 数据结构-栈在括号匹配中的应用

    所谓括号校验匹配其实质是对多种类型括号正确配对的校验(包括:().[].{})即([])或者[()]为正确的表达式,如果出现交叉则匹配失败,如[(])或([())则为不正确格式. 该程序也运用了栈的思 ...

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

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

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

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

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

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

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

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

  10. 顺序栈实现括号匹配的检验(C语言实现)【栈】

    原理说明 算法思路 代码演示 原理说明 假设表达式中允许括号嵌套,则检验括号是否匹配的方法可用"期待的急迫程度"这个概念来描述. 我们下面给和例子进行说明: 可能出现的不匹配的情况 ...

最新文章

  1. 染色[SDOI2011]
  2. tp设置打印机虚拟服务器,tp打印机服务器设置
  3. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件
  4. Java案例:泛型用法演示
  5. Ansible 获取主机信息模块setup、获取文件详细信息模块stat(学习笔记十)
  6. SQLi LABS Less-19
  7. Android开发笔记(十三)视图绘制的几个方法
  8. 在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)...
  9. 一个layer可以跟着画完的线移动ios程序 好玩啊。
  10. 空气质量指数,主要污染物PM10、PM2.5、CO、NO2、SO2详解
  11. 阿里云acp报名了可以退吗?阿里云acp认证所需具备的知识
  12. 无人机大面积航测面临的难点及解决方法
  13. 分布式 | dble 启动的时候做了什么之配置检测
  14. 因计算机丢失d3dx9-30,Win10玩仙剑5提示d3dx9_30.dll文件丢失的解决方法
  15. 架构模式在新浪微博的应用
  16. 渗透测试——信息收集
  17. 批量采集多个淘宝商品的洋淘买家秀图片并统一保存
  18. 安装mysql黑屏电脑卡死_电脑卡屏死机是怎么回事?
  19. 华为机试题练习-保险箱
  20. QComboBox 右侧下拉按钮qss样式设置

热门文章

  1. delphi 调试控件代码_机器人调试(六十七)
  2. python 文本分析教程_Python笔记_第五篇_Python数据分析基础教程_文件的读写
  3. python 特征选择卡方_为什么pythonsklearn特征选择卡方(chi2)测试不是对称的?
  4. JAVA中加密算法的简单使用入门
  5. 通过系统架构设计师考试的一点经验(2019年软考)+学习资料下载
  6. T5: Text-To-Text Transfer Transformer
  7. python 调用dll中c或c++语言带指针,数组方法
  8. Ubuntu开机慢_开机计时1分30秒_A start job is running for dev-disk-by...
  9. ORB-SLAM3论文解读
  10. 机器学习笔记【二】逻辑回归与分类(2):感知机学习算法与逻辑回归的区别,牛顿方法