利用算法Evaluate Expression- reduced对算数表达式3*(7-2)求值
时间: 2024-04-02 09:32:18 浏览: 144
根据 Evaluate Expression- reduced 算法,可以先将算数表达式转化为后缀表达式,然后再根据后缀表达式求值。将3*(7-2)转化为后缀表达式的过程如下:
1. 初始化一个空栈 S,创建一个空的后缀表达式列表 L。
2. 从左到右扫描算数表达式:
a. 如果当前扫描到的是一个数字,就将它加入列表 L。
b. 如果当前扫描到的是一个运算符,就进行如下操作:
i. 如果 S 为空,或者 S 栈顶的运算符为左括号,就将该运算符加入栈 S。
ii. 如果该运算符优先级比栈顶运算符的优先级高,就将该运算符加入栈 S。
iii.如果该运算符优先级比栈顶运算符的优先级低或者相等,就将栈顶运算符弹出并加入列表 L,然后重复步骤 b 直到满足条件 ii。
c. 如果当前扫描到的是一个左括号,就将它加入栈 S。
d. 如果当前扫描到的是一个右括号,就进行如下操作:
i. 将栈顶运算符弹出并加入列表 L,直到遇到左括号。
ii. 将左括号弹出,但不加入列表 L。
3. 如果算数表达式已经扫描完毕,就将栈 S 中的所有运算符依次弹出并加入列表 L。
4. 列表 L 中的元素顺序即为转换后的后缀表达式。
将3*(7-2)转化为后缀表达式的结果为:3 7 2 - *。
接下来,可以利用栈来求值后缀表达式。具体的求值过程如下:
1. 初始化一个空栈 S。
2. 从左到右扫描后缀表达式:
a. 如果当前扫描到的是一个数字,就将它压入栈 S。
b. 如果当前扫描到的是一个运算符,就从栈 S 中弹出两个数字,进行相应运算,并将运算结果压入栈 S。
3. 后缀表达式扫描完毕之后,栈 S 中仅有一个数字,即为表达式的值。
将后缀表达式3 7 2 - *求值的过程如下:
1. 初始化一个空栈 S。
2. 从左到右扫描后缀表达式:
a. 遇到数字 3,将其压入栈 S。
b. 遇到数字 7,将其压入栈 S。
c. 遇到数字 2,将其压入栈 S。
d. 遇到运算符 -,从栈 S 中弹出两个数字,分别为 2 和 7,进行减法运算 7-2=5,将运算结果 5 压入栈 S。
e. 遇到运算符 *,从栈 S 中弹出两个数字,分别为 5 和 3,进行乘法运算 3*5=15,将运算结果 15 压入栈 S。
3. 后缀表达式扫描完毕之后,栈 S 中仅有一个数字 15,即为表达式的值。
因此,算数表达式3*(7-2)的值为15。
阅读全文