「今天是学习C语言第天」
纸上学来终觉浅,绝知此事要躬行。——陆游「冬夜读书示子聿」#括号表达式匹配检验
数据结构栈的一个经典应用,表达式中可以有(){}[]三类括号,编写程序检查括号是否匹配。
例如:表达式({}[])合法,表达式([{})不匹配非法。
#代码运行结果
请输入括号表达式:({}[])表达式({}[])括号匹配,合法。请输入括号表达式:([{})表达式([{})括号不匹配,不合法。请输入括号表达式:(1+2)*3+a[3]表达式(1+2)*3+a[3]括号匹配,合法。请输入括号表达式:1+3*a[3]+(4+2表达式1+3*a[3]+(4+2括号不匹配,不合法。
#代码实现
实现要点:为简单方便,这里使用数组模拟栈,实际应用中可以使用之前的顺序栈等数据结构。
基本思想:每读取一个括号,如果是左括号,作为新的更急切的期待左括号入栈,因为读取的最新左括号更加“急切期待”下一个读取其匹配的右括号;如果读取的是右括号,则和栈顶的括号比较,如果匹配,则出栈消除,否则不合法,因为栈顶保存当前急切期待的左括号,如果新读取的右括号不能够与其匹配,说明表达式括号不匹配。
/*==========================================名称:C语言实现常用数据结构功能:括号匹配-顺序栈应用示例:例如输入表达式([]())判断合法:输入([)]判断非法环境:Windows10+Dev-C++编译作者:一只会C的猫