栈的应用Ⅰ--后缀表达式 括号匹配
2017-08-22 17:16
357 查看
一、后缀表达式
在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4/2”,这中表达式符合我们的思维逻辑,可读性强,但是不利于计算机的解析。由波兰逻辑学家J.Lukasiewicz发明出后缀表达式,比如上式转变为后缀表达式”5 3 7 + * 4 2 / -“,这种人类难以适应的表达顺序,计算机却很受用。
1.计算机应用后缀表达式的过程:
如后缀表达式:”5 3 7 + * 4 2 / -”
规则:从左到右遍历表达式的每一个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。
①初始化一个空栈。此栈用来对要运算的数字进出使用。
②后缀表达式中前三个都是数字,所以5,3,7进栈。
③接下来是’+’运算符,将栈顶的两个元素出栈进行加法运算,再将结果进栈。
④之后是’*’运算符,将栈顶的两个元素出栈进行运算,将运算结果再进栈。
⑤之后4,2进栈,遇’/’将2,4出栈,2作为除数,4作为被除数。
⑥之后遇’-‘,50作为被减数。48入栈,最后出栈,栈为空结果为48.
二、中缀表达式转后缀表达式
如:中缀表达式”5*(3+7)-4/2”转为”5 3 7 + * 4 2 / -“
规则:顺序遍历数字和符号,数字输出,成为后缀表达式的一部分,遇符号则判断栈顶元素与其的优先级,若为右括号或者优先级不高于栈顶元素,则将栈顶元素依次出栈并输出,并将当前符号进栈,直到后缀表达式输出完成。
①5输出,’*’入栈,’(‘入栈,3输出,’+’入栈,7输出。
输出:5 3 7
②遇到’)’,则将’(‘之前的符号全部出栈输出。
输出:5 3 7 +
③遇到’-‘,优先级比栈顶’* ‘低,’* ‘出栈输出,’-‘进栈。
输出:5 3 7 + *
④输出4,遇到’/’比栈顶’-‘高,’/’进栈,输出2,表达式读取结束,栈内符号依次输出。
输出:5 3 7 + * 4 2 / -
中缀表达式转后缀表达式结束
三、括号匹配
三种配对括号’(‘,’)’,’[‘,’]’,’{‘,’}’的序列匹配
规则:做一个空栈,读入字符直到字符串尾。如果读到的字符为开放符号’(‘,’[‘,’{‘,则将其推入栈中,如果字符为封闭符号’)’,’]’,’}’,如果栈为空则报错,否则将栈顶元素弹出,如果不是对应的封闭元素,则报错,在字符串读取结束,栈不为空则报错。
如字符串: (a)c[b(d)]e(g{f})
①则顺序读取字符,第一个字符为’(‘开放符号,则将’(‘压栈。
②读取a,不进行操作,继而读取’)’为封闭符号,进行出栈匹配。栈顶元素为’(‘是对应的配对符号,则继续操作…
③直到最后字符串读取完成,查看top是否为-1。
四、函数栈
是重要知识点,保留。
在我们日常生活中所见表达式都是中缀表达式,如 “5*(3+7)-4/2”,这中表达式符合我们的思维逻辑,可读性强,但是不利于计算机的解析。由波兰逻辑学家J.Lukasiewicz发明出后缀表达式,比如上式转变为后缀表达式”5 3 7 + * 4 2 / -“,这种人类难以适应的表达顺序,计算机却很受用。
1.计算机应用后缀表达式的过程:
如后缀表达式:”5 3 7 + * 4 2 / -”
规则:从左到右遍历表达式的每一个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。
①初始化一个空栈。此栈用来对要运算的数字进出使用。
②后缀表达式中前三个都是数字,所以5,3,7进栈。
③接下来是’+’运算符,将栈顶的两个元素出栈进行加法运算,再将结果进栈。
④之后是’*’运算符,将栈顶的两个元素出栈进行运算,将运算结果再进栈。
⑤之后4,2进栈,遇’/’将2,4出栈,2作为除数,4作为被除数。
⑥之后遇’-‘,50作为被减数。48入栈,最后出栈,栈为空结果为48.
二、中缀表达式转后缀表达式
如:中缀表达式”5*(3+7)-4/2”转为”5 3 7 + * 4 2 / -“
规则:顺序遍历数字和符号,数字输出,成为后缀表达式的一部分,遇符号则判断栈顶元素与其的优先级,若为右括号或者优先级不高于栈顶元素,则将栈顶元素依次出栈并输出,并将当前符号进栈,直到后缀表达式输出完成。
①5输出,’*’入栈,’(‘入栈,3输出,’+’入栈,7输出。
输出:5 3 7
②遇到’)’,则将’(‘之前的符号全部出栈输出。
输出:5 3 7 +
③遇到’-‘,优先级比栈顶’* ‘低,’* ‘出栈输出,’-‘进栈。
输出:5 3 7 + *
④输出4,遇到’/’比栈顶’-‘高,’/’进栈,输出2,表达式读取结束,栈内符号依次输出。
输出:5 3 7 + * 4 2 / -
中缀表达式转后缀表达式结束
三、括号匹配
三种配对括号’(‘,’)’,’[‘,’]’,’{‘,’}’的序列匹配
规则:做一个空栈,读入字符直到字符串尾。如果读到的字符为开放符号’(‘,’[‘,’{‘,则将其推入栈中,如果字符为封闭符号’)’,’]’,’}’,如果栈为空则报错,否则将栈顶元素弹出,如果不是对应的封闭元素,则报错,在字符串读取结束,栈不为空则报错。
如字符串: (a)c[b(d)]e(g{f})
①则顺序读取字符,第一个字符为’(‘开放符号,则将’(‘压栈。
②读取a,不进行操作,继而读取’)’为封闭符号,进行出栈匹配。栈顶元素为’(‘是对应的配对符号,则继续操作…
③直到最后字符串读取完成,查看top是否为-1。
四、函数栈
是重要知识点,保留。
相关文章推荐
- (1.2.2.1)栈和队列的应用:数制转换、括号匹配、后缀表达式求解,中缀表达式求解、双栈实现队列,min函数栈
- Javascript数据结构算法之栈(进制转换,阶乘,后缀表达式,括号匹配)
- 栈的两个应用:括号匹配的检验和表达式求值
- 中缀表达式转后缀表达式与括号匹配
- 栈的应用(括号匹配、后缀表式计算、中缀转后缀)
- 括号匹配问题 中缀表达式转换为后缀表达式
- 栈的应用----括号匹配、逆波兰表达式【数据结构】
- 重温数据结构-栈的应用:进制转换,括号匹配检测,行编辑,迷宫求解,求表达式的值
- 栈及栈的应用(括号匹配和逆波兰表达式)
- 栈的应用(括号匹配、逆波兰表达式)
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- 栈应用2-带括号后缀表达式
- 数据结构-栈的应用-算术表达式小括号匹配
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- 2. 栈的两个应用:括号匹配和表达式的计算。
- (容器配接器)堆栈应用:判断表达式中的括号是否匹配
- 栈的应用举例——括号匹配的检验
- 表达式的括号是否匹配问题
- 堆栈小应用(一):括号匹配程序
- 栈应用之括号匹配