您的位置:首页 > 理论基础 > 数据结构算法

栈的应用Ⅰ--后缀表达式 括号匹配

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。

四、函数栈

是重要知识点,保留。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构