C++ 中缀表达式转后缀表达式
关于后缀表达式如何计算,这里不做过多叙述。以下提供两种方式供参考,第二个种方式粗略的写了计算方式。
方式一 —— 栈
该方式主要是通过栈的数据结构,规定运算符的优先级进行处理即可。
参考链接:https://blog.csdn.net/liudongdong19/article/details/80767156
源码(C++)
#include
#include
方式二 —— 二叉树
思路如下(以下思路仅供参考):
比如对于中缀表达式:2*(3*5+2)+7/1-4,我们使用一个vector的动态数组存储数字(整型和非整数);使用stack存储运算符号,由于优先级的关系,我们使用’#'来表示最低优先级(其它符号均可)。
现假定动态数组vector arr和stack s,一开始第一轮我们将2插入至arr,‘*‘的优先级比’#‘高,直接插入s中,但是由于当前没有两个以上数字,所以我们继续处理中缀表达式,s中插入’(‘运算符,之后一直处理数字和符号(s中如果有’(‘运算符则直接无条件插入),直至遇到’)‘符号,此时,当前arr = {2,3,5,2},s = {’#’,‘*’,‘(’,‘*’,‘+’};我们对括号中的符号以及相应数字进行处理,结果如下:
此时中缀表达式只剩下:+7/1-4。继续处理,如下:
最后,将剩余的符号和数字进行处理。
源码(C++)
#include
#include
#include
#include
#include