C++ 栈的括号匹配
总结归纳
- 算法思想: 设置一个空栈,顺序读取括号。读取左括号时,将括号入栈;读取右括号时,弹出栈顶元素,栈顶即是与之匹配的最近的左括号。
- 匹配不成功的三种情况:(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++ 栈的括号匹配相关推荐
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
利用顺序栈解决括号匹配问题(c++)-- 数据结构 参考文章: (1)利用顺序栈解决括号匹配问题(c++)-- 数据结构 (2)https://www.cnblogs.com/yi2105/p/106 ...
- python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题
括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...
- 六十三、栈在括号匹配和表达式求值中的应用
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 文章目录 括号匹配 数 ...
- 数据结构-栈在括号匹配中的应用
所谓括号校验匹配其实质是对多种类型括号正确配对的校验(包括:().[].{})即([])或者[()]为正确的表达式,如果出现交叉则匹配失败,如[(])或([())则为不正确格式. 该程序也运用了栈的思 ...
- 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...
- python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...
算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...
- 栈在括号匹配中的应用
括号匹配问题 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意即()或[([][])]等均为正确的格式,[(]或([())或(()]均为不正确的格式. void test() {int ...
- python用栈实现括号匹配问题
问题描述: 给定一个字符串文字,里面可能含有"()","[]","{}"三种 括号,判断字符串中的括号是否都成对出现*** 思路分析: 如果 ...
- 顺序栈实现括号匹配的检验(C语言实现)【栈】
原理说明 算法思路 代码演示 原理说明 假设表达式中允许括号嵌套,则检验括号是否匹配的方法可用"期待的急迫程度"这个概念来描述. 我们下面给和例子进行说明: 可能出现的不匹配的情况 ...
最新文章
- 003_onreadystatechange事件
- OpenGL envmapsphere球形环境图的实例
- 关于中英数字混排的字符串分割问题(转)
- Spring Boot整合Spring Data Redis-整合步骤
- 你真的懂 timeout 吗?
- docker 安装 mysql和Navicat Premium 远程连接
- 快速排序算法c语言lomuto,快速排序(N.Lomuto版)
- 促销海报灵感素材,不卖出去都难
- 【心电信号】基于matlab心电信号采集与处理【含Matlab源码 954期】
- dubbo实现两个系统之间的通信
- 使用PHP自带的ZipArchive的一些问题
- 49 html鼠标事件(在线测试)
- haneWIN NFS服务器端 V1.1.69 汉化版
- Springboot 基于微信小程序的高校学生疫情在校封闭管理系统的设计与实现 毕业设计-附源码240904
- 接触mybatisplus单页500条限制_单页网站制作教程,单页网站设计五大技巧
- addClass函数
- Linux遇到Aborted (core dumped)
- 【C++】Big Five: 构造函数、拷贝构造函数、拷贝赋值函数、移动构造函数、析构函数
- “海外传播官”阿乐:让20万外国粉丝通过我“在中国生活”
- 读书笔记:软件工程(4) - 软件过程模型:瀑布模型