当前位置: 代码迷 >> 综合 >> 简单表达式求值
  详细解决方案

简单表达式求值

热度:0   发布时间:2024-02-05 03:21:49.0

用算法来实现简单表达式(指只包含+-*/四则运算及括号的表达式)求值的困难在于无法从表达式直接确定运算的顺序。因为我们常用的表达式形式是:表达式+运算符+表达式(即中缀表达式)。我们无法确定“运算符”与后面表达式中包含的运算符的优先级关系。

利用二叉树和堆栈结构可以很好的解决这个问题。

我们知道,一个表达式的运算顺序是确定的,所以我们需要将这种中缀表达式转换为一种确定顺序的运算表达式。可以利用二叉树后序查找方式,把运算值作为叶子节点,运算符作为非叶子节点,可以得到表达式的二叉树结构。

1、第一个值作为叶子节点;2、第一个运算符作为该叶子节点的父节点;3、表达式剩下的部分根据运算的优先级进行插入,若后一个运算的优先级高则将表达式作为当前父节点的右孩子节点,否则做为该父节点的父节点;4、依次插入直到表达式完毕。

然后进行一次后序查找就得到了后缀表达式。

利用后缀表达式求值:因为操作数总是在操作符的前面,所以可以利用堆栈结构配合出栈入栈的动作实现表达式的求值。

1、设置一个栈,开始时,栈为空;2、然后从左到右扫描后缀表达式,若遇操作数,则进栈;3、若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的放到运算符左边,运算后的结果再进栈,直到后缀表达式扫描完毕;4、最后,栈中仅有一个元素,即为运算的结果。

  相关解决方案