c语言将中缀表达式转化为后缀表达式并求值
时间: 2023-04-23 08:00:04 浏览: 168
C语言实现中缀、后缀、前缀表达式 相互转化并求值.doc
5星 · 资源好评率100%
中缀表达式转后缀表达式的步骤:
1. 初始化一个栈和一个输出队列。
2. 从左到右扫描中缀表达式的每个元素。
3. 如果当前元素是数字,直接将其加入输出队列。
4. 如果当前元素是左括号,将其压入栈中。
5. 如果当前元素是右括号,则将栈中的元素弹出并加入输出队列,直到遇到左括号为止。左括号不加入输出队列,右括号也不加入栈中。
6. 如果当前元素是运算符,比较其与栈顶运算符的优先级:
a. 如果栈顶运算符优先级高于或等于当前运算符,则将栈顶运算符弹出并加入输出队列,直到栈为空或栈顶运算符优先级低于当前运算符。
b. 将当前运算符压入栈中。
7. 如果扫描完中缀表达式后,栈中还有元素,将它们依次弹出并加入输出队列。
8. 输出队列中的元素即为后缀表达式。
求后缀表达式的值的步骤:
1. 初始化一个栈。
2. 从左到右扫描后缀表达式的每个元素。
3. 如果当前元素是数字,将其压入栈中。
4. 如果当前元素是运算符,弹出栈顶的两个元素,进行运算,并将结果压入栈中。
5. 扫描完后缀表达式后,栈中只剩下一个元素,即为表达式的值。
例如,将中缀表达式"3+4*5-6/2"转化为后缀表达式的过程如下:
中缀表达式:3+4*5-6/2
输出队列:3
栈:+
输出队列:3
栈:+ *
输出队列:3
栈:+ * 4
输出队列:3 4
栈:+ *
输出队列:3 4 5
栈:+ * -
输出队列:3 4 5 *
栈:+ -
输出队列:3 4 5 * +
栈:-
输出队列:3 4 5 * + 6
栈:-
输出队列:3 4 5 * + 6 2
栈:- /
输出队列:3 4 5 * + 6 2 /
后缀表达式为"3 4 5 * + 6 2 / -",其值为7。
阅读全文