前缀 中缀 后缀
波兰式 通常表达方式(计算机看不懂) 逆波兰式
中缀—>后缀
方法一:
先将每一步用括号括起来,再将运算符移至括号后面,最后去掉括号。
X=A+B*(C-D)/E ——> (X=(A+((B*(C-D))/E))) ——> (X(A((B(CD)-)*E)/)+)= ——> XABCD-*E/+=
方法二:
初始化两个栈,s1存放操作数,s2存放运算符;
从表达式左边开始遍历,数字放在s1,运算符放在s2。
运算符放入s2中的规则:
如果s2为空,或者栈顶是“(”,则直接放进去;
如果当前运算符优先级大于栈顶元素优先级,则直接放入;
如果当前运’算符优先级小于栈顶元素优先级,则栈顶元素出栈,放入s1;
如果遇到“)“,运算符出栈,入s1,直到遇到”)“;
如果遇到“()”,丢掉,且把“()”之间的运算符放入s1;
s1中的元素出栈,放入s2栈;
s2出栈重新组成表达式。
中缀—>前缀
方法一:先将每一步用括号括起来,再将运算符移至括号前面,最后去掉括号。
方法二:
初始化两个栈,s1存放操作数,s2存放运算符;
从表达式右边开始遍历,数字放在s1,运算符放在s2。
运算符放入s2中的规则:
如果s2为空,或者栈顶是“)”,则直接放进去;
如果当前运算符优先级大于等于栈顶元素优先级,则直接放入;
如果当前运’算符优先级小于栈顶元素优先级,则栈顶元素出栈,放入s1;
s2中的元素出栈,放入s1栈;
s2出栈重新组成表达式。