前缀,中缀,后缀表达式转换

来源:互联网 发布:造价大数据 编辑:程序博客网 时间:2024/04/30 10:11

title: 前缀,中缀,后缀表达式转换
date: 2017-09-10 19:45:09
categories: ‘technology’
tags:

- ‘算法’

1 基本概念

​ 在计算机中表达式有三种,前缀表达式(波兰式),中缀表达式,后缀表达式(逆波兰式)。

如表达式:a+b*(c-d)-e/f

前缀表达式:-+a*b-cd/ef

中缀表达式:a+b*(c-d)-e/f

后缀表达式:abcd-*+ef/-

2 转换原理

​ 原理不难,我们遇到遇到操作数的时候直接输出,当遇到操作符(包括‘(’,‘+’,‘-’,‘*’,‘/’)的时候,我们需要把符号压入到栈中,

  • 2.1 当遇到‘)’的时候:

​ 我们需要依次从栈顶弹出符号,直到遇到‘(’,并且要将‘(’弹出。如:(a*(b+c)),栈中的是(*(+,当遇到‘)’的时候,我们要弹出‘+’,‘(’。

  • 2.2 当遇到‘(’的时候

​ 此时没什么要说的,直接压栈。

  • 2.3 当遇到‘+’,‘-’,‘*’,‘/’的时候:

​ 我们要把栈顶元素的符号的优先级跟输入的符号的优先级进行对比,如果栈顶优先级高的话,我们就要把栈顶元素依次弹出,直到栈顶的优先级低于输入的优先级或者栈空。

如:a+b+c+d,跟a+b*c+d得到的符号顺序就不一样,原因就是这个优先级的问题。

  • 2.4 当遇到操作数的时候:

​ 毫无疑问,直接输出


例题:

简便方法

中缀表达式(a+b) * c * (d-e/f) 转成前缀,后缀表达式

  • 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e)) 

  • 第二步:转换前缀与后缀表达式 
     

  • 前缀:把运算符号移动到对应的括号前面,则变成拉:-( +(a *(bc)) +(de)) 。把括号去掉:-+a*bc+de 前缀式子出现 
  • 后缀:把运算符号移动到对应的括号后面,则变成拉:((a(bc)* )+ (de)+ )- 。把括号去掉:abc*+de+- 后缀式子出现 
原创粉丝点击