表达式求值算法一


1.置操作数栈为空栈,表达式起始符“#”为栈底元素。
2.依次读入表达式中的每个字符并进行如下判断,直至整个表达式读完且表达式求值运算完毕(即OPTR栈的栈顶元素和当前输入的字符均为“#”)。
(1)若读入字符是操作数,则将输入字符存入数组中,继续判断下一字符是否为操作数,若是,则继续存入数组中,若不是则将数组中的字符读出入OPND栈。
(2)若读入字符是运算符,则根据已存入二维数组中的两两运算符间优先级关系,将读入字符和OPTR栈的栈顶运算符比较优先权后作相应操作:
①若栈顶元素优先级低于读入字符的优先级,则将读入字符入OPTR栈,并读取下一个字符。
②若栈顶元素优先级等于读入字符的优先级,说明括号相遇,也就是读入字符 为“)”,栈顶元素为“(”,删除栈内括号“(”即可,则弹出
OPTR栈顶的元素,并读取下一个字符。
③若栈顶元素优先级高于读入字符的优先级,需要先进行栈顶运算符运算,则弹出OPTR栈的栈顶元素作为运算符,分两次弹出OPND栈的栈顶元
素作为操作数进行运算,并将运算结果压入栈中。
3.读取并返回OPND栈的栈顶元素即为表达式的运算结果。


文章作者: irenhongyan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 irenhongyan !
 上一篇
表达式求值算法二 表达式求值算法二
1.中缀表达式转为后缀表达式(把转换后的后缀表达式存入字符数组中):(1)初始化栈。(2)从左至右依次读取表达式中的字符并进行如下操作,直至整个表达式读完。 ①若读入字符为运算数则将其存入字符数组,继续读入下一个字符,若是,将读入字符
2020-05-06
下一篇 
借助队列对栈中元素排序 借助队列对栈中元素排序
问题描述:栈中元素无序,借助队列将栈中元素排序解题思路:1.初始化三个队列,分别为q1、q2、q32.读取栈顶元素,并作如下操作,直到栈空,最后结果保存在q3中。(1)如果q1队尾元素小于等于栈顶元素,则弹出栈顶元素并将其存入q1队列中,并
2020-05-06