括号匹配问题(栈)C++
题目描述
在一个表达式中含有圆括号或方括号等来表示运算的优先级,将这些括号提取出来就构成了括号序列 例如:表达式[(A+B)*C]-[E-F] 其括号序列为[()][]
合法的括号序列称为匹配序列,不合法的括号序列称为不匹配序列。匹配序列示例:([()]) [] ()[()] ,不匹配序列示例:([()] ] (][()],那么如何判断一个括号序列是否为匹配序列呢?请用栈的结构来进行验证。
分析
抓住栈的特性:先进后出,后进先出。即一边遍历一边判断,将左类型括号如( [ {,进行入栈操作,当遇到右类型括号时,将此与栈顶元素进行匹配判断,这样可以保证对称关系。不过值得一提的是,该算法没有处理好逻辑关系,例如小括号只能在中括号之内,当然题目也没有这层意思,故不予考虑。
下面附C++代码,创建SqStack类,将基本操作写入方法中。C语言写法也类似,即建立struct SqStack。
#include <iostream>#define MAXSIZE 1000using namespace std;template<typename T>
class SqStack{T *data;int top;public:SqStack();~SqStack();bool EmptyStack();bool Push(T e);bool Pop(T &e);
};template<typename T>
SqStack<T>::SqStack(){data= new T[MAXSIZE];top=-1;
}template<typename T>
SqStack<T>::~SqStack(){delete []data;
}template<typename T>
bool SqStack<T>::EmptyStack(){return top==-1?true:false;
}template<typename T>
bool SqStack<T>::Push(T e){if(top==MAXSIZE-1) return false;top++;data[top]=e;return true;
}template<typename T>
bool SqStack<T>::Pop(T &e){if(EmptyStack()) return false;e=data[top];top--;return true;
}bool IsMatch(char str[]){int i;char ch;SqStack<char> s;for(i=0;str[i]!='\0';i++){if(str[i]=='('||str[i]=='['||str[i]=='{') s.Push(str[i]);else{if(str[i]==')'){if(!s.Pop(ch)) return false;if(ch!='(') return false;}if(str[i]==']'){if(!s.Pop(ch)) return false;if(ch!='[') return false;}if(str[i]=='}'){if(!s.Pop(ch)) return false;if(ch!='{') return false;}}}if(s.EmptyStack()) return true;else return false;
}int main(){char str1[MAXSIZE];cin.getline(str1,MAXSIZE);if(IsMatch(str1)) cout<<"Right!"<<endl;else cout<<"ERROR!"<<endl;return 0;
}
括号匹配问题(栈)C++相关推荐
- Problem C: 括号匹配(栈和队列)
Problem C: 括号匹配(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 76 Solved: 18 [Submit][Status ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- P1944 最长括号匹配(栈模拟/DP)
P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...
- 括号匹配+Java栈
括号匹配 import java.util.LinkedList;class MyStack{private int num;private LinkedList<Character>da ...
- 回文数、括号匹配(栈操作)
回文数 "xyzyx"是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如"席主席"."记书记"."aha" ...
- python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡
栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...
- c++ 之 括号匹配(栈)
其实这个代码我一好几天前就开始写了,一开始用c写,但是发现用c写一个正解应该用栈解决的c++问题对于一个焫鷄来讲就好比刚学会汉语拼音然后让你写英语作文的感觉,唉,今天就转手用c++来写. 栈还没大学明 ...
- c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...
文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...
- 括号匹配不一定用栈哦(洛谷P1739题题解,Java语言描述)
说明 有点标题党,严格地说,括号匹配用栈做比较规范. 问题是下面这题有点水啊,简便点大家都开心~~ 题目要求 P1739题目链接 分析 题目太水,所以说我们可以认为什么各种异常不会出现. 只需要--简 ...
- python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题
括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...
最新文章
- mysql客户端与服务端_mysql语句在客户端与服务端的基本使用
- c语言运算程序,C语言运算符
- Sparsity稀疏编码(三)
- outlook advanced find 快捷键不起作用
- java学习(55):定义一个抽象类的继承
- poj 1734 (最小环)
- java整理软件--- Java OCR 图像智能字符识别技术,可识别中文,但是验证码不可以识别...已测识别中文效果很好
- EJB3.0异常总结--- Need to specify class name in environment or system property,
- [Color]彩色转灰度算法彻底学习
- php7数组写法,数组运算符 - PHP 7 中文文档
- python3小游戏源代码_python3实现弹弹球小游戏
- 京瓷1800打印机扫描步骤_京瓷复印机扫描设置方法京瓷复印机扫描到电脑设置...
- dell服务器无线网卡,dell笔记本内置无线网卡找不到怎么处理
- 联通项目中的常见术语(BTS、BSC、MSC、VLR、HLR)
- 手机号码归属地api文档
- 利用腾讯云函数做蓝奏云解析API
- 成功中标 荣联为中国检科院打造一站式生信服务平台
- 小米一元流量magisk_小米手机官方REC装面具(magisk)教程
- web应用部署的根目录
- 雷塞DMC1380的使用:常用编程函数
热门文章
- 卡尔曼滤波器简介——多维卡尔曼滤波
- 女巫煎蛋(omelette for a witch)
- cpp map 获取所有 key_酪蛋白磷酸肽CPP:促进钙吸收它超强
- [Ubuntu] 在安卓手机中安装 Ubuntu
- 怎么将CAD图纸转换成高清晰度PNG格式怎么操作?
- StatisticalOutlierRemoval 过滤器去除异常值
- 数据分析:销售数据分析如何做?这篇干货收藏备用!
- ubuntu选择编辑器select-editor
- 《欲望都市》要出电影版啦!
- Linux宝塔Apache死机,宝塔面板重启不了apache,出现错误:httpd not running, trying to start...