总结归纳

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

代码实践

/*
栈的括号匹配
*/#include <iostream>#define MaxSize 10 // 栈中元素的最大个数using namespace std;typedef char ElemType;// 栈的结构
struct SqStack {ElemType data[MaxSize]; // 静态数组存放栈顶元素int top;                // 栈顶指针
};// 初始化栈
void InitStack(SqStack &S) { S.top = -1; }// 判断栈空
bool StackEmpty(SqStack S) {if (S.top == -1) {return true;} else {return false;}
}// 入栈
bool Push(SqStack &S, ElemType x) {if (S.top == MaxSize - 1) {return false;} else {S.top++;S.data[S.top] = x; // S.top指向栈顶return true;}
}// 出栈
bool Pop(SqStack &S, ElemType &x) {if (S.top == -1) { // 栈空return false;} else {x = S.data[S.top--]; // 先赋值再--return true;}
}// 括号匹配
bool BracketMatch(char str[], int len) {SqStack S;InitStack(S);for (int i = 0; i < len; i++) {if (str[i] == '(' || str[i] == '[' || str[i] == '{') {Push(S, str[i]); // 扫描到左括号,入栈} else {if (StackEmpty(S)) { // 扫描到右括号且当前栈空return false;}char topElem;Pop(S, topElem); // 栈顶元素出栈if (str[i] == ')' && topElem != '(') {return false;}if (str[i] == ']' && topElem != '[') {return false;}if (str[i] == '}' && topElem != '{') { // 弹出的括号与遍历的括号不匹配return false;}}}return StackEmpty(S); // 括号全部匹配完后,栈空为成功
}// 获取字符串数组长度
int GetLength(char str[]) {int i = 0;while (str[i] != '\0') {i++;}return i;
}int main() {char str[MaxSize];cin >> str;int len = GetLength(str);bool result = BracketMatch(str, len);cout << result << endl;return 0;
}

C++ 栈的括号匹配相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 003_onreadystatechange事件
  2. OpenGL envmapsphere球形环境图的实例
  3. 关于中英数字混排的字符串分割问题(转)
  4. Spring Boot整合Spring Data Redis-整合步骤
  5. 你真的懂 timeout 吗?
  6. docker 安装 mysql和Navicat Premium 远程连接
  7. 快速排序算法c语言lomuto,快速排序(N.Lomuto版)
  8. 促销海报灵感素材,不卖出去都难
  9. 【心电信号】基于matlab心电信号采集与处理【含Matlab源码 954期】
  10. dubbo实现两个系统之间的通信
  11. 使用PHP自带的ZipArchive的一些问题
  12. 49 html鼠标事件(在线测试)
  13. haneWIN NFS服务器端 V1.1.69 汉化版
  14. Springboot 基于微信小程序的高校学生疫情在校封闭管理系统的设计与实现 毕业设计-附源码240904
  15. 接触mybatisplus单页500条限制_单页网站制作教程,单页网站设计五大技巧
  16. addClass函数
  17. Linux遇到Aborted (core dumped)
  18. 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
  19. “海外传播官”阿乐:让20万外国粉丝通过我“在中国生活”
  20. 读书笔记:软件工程(4) - 软件过程模型:瀑布模型

热门文章

  1. PyTorch DDP
  2. 软件开发中的10个认知偏差
  3. 共筑信创产业生态--国产化应用如何与麒麟系统进行适配认证
  4. 物联网设备模糊:DIANE:识别应用程序中的模糊触发器,为物联网设备生成受限制的输入
  5. 手机文件管理ftp服务器,ftp工具手机版(ftp文件传输管理工具)V1.0.2 手机版
  6. TorontoCity:众生观天下
  7. 解决Mac 80端口被占用
  8. php+时间戳+星座,php 根据日期显示星座的简单示例
  9. html escape unescape
  10. kubeadm部署k8s直接证书100年