您的位置:首页 > 其它

前缀、中缀、后缀的相互转换

2017-08-24 02:19 204 查看
前缀                 中缀                       后缀
波兰式        通常表达方式(计算机看不懂)          逆波兰式


中缀—>后缀

方法一:

先将每一步用括号括起来,再将运算符移至括号后面,最后去掉括号。

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出栈重新组成表达式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: