前缀,中缀,后缀表达式

参考:前缀、中缀、后缀表达式(逆波兰表达式) - chensongxian - 博客园

中缀表达式就是人们日常生活中普遍使用的四则运算表达式。如(3+4)*5

前缀表达式又称波兰表达式,其运算符位于操作数之前,比如:- × + 3 4 5 6

后缀表达式又称逆波兰表达式,其运算符位于操作数之后,比如:3 4 + 5 × 6 -

前缀表达式的计算机求值:

从右往左扫描表达式,遇到数字将其压入栈,遇到运算符,弹出两个数字元素并计算,然后将所求的得值压入栈,继续重复操作,直至只剩下一个元素,弹出,即为结果。

例如:- * + 3 4 5 6

1.扫到6,将其压入,5压入,4压入,3压入。

2.扫到+,弹出3和4,计算3+4求得7,将7压入。

3.继续扫,扫到*,弹出7和5,计算7*5,求得35,压入35.

4.扫到-,弹出35和6,计算35-6,求得29,得到结果。

中缀转前缀:

1.建立两个栈,s1,s2,一个存放运算符,一个存放数字。

2.从右往左扫描中缀表达式,如果是数字就压入s2。

3.若是运算符:

如果栈为空或是栈顶元素为‘(’,直接压入运算符。

如果是‘)’,弹出并压入s2中,直到‘(’,并且丢弃括号。

如果运算符的优先等级大于或相等栈顶元素的优先等级,直接压入s1。

如果小于,则将栈顶元素弹出压入s2,再将运算符与此时的栈顶元素相比较,若大于或相等则压入。

4.重复操作,直至到达最左端。

5.将s1的元素依次弹出并压入s2,依次弹出s2的元素。

后缀表达式的计算机求值:

与前缀表达式相同,只不过是从左往右。

例如计算3 4 + 5 * 6 -:

1.扫到3,压入,4压入。

2.扫到+,弹出3和4,计算3+4,得出7压入。

3.扫到5,压入。

4.扫到*,弹出5和7,计算5*7,得出35,压入。

5.扫到6,压入。

6.扫到-,弹出35和6,计算35-6,得出29,求出结果。

中缀转后缀表达式:

1.建立两个栈,s1,s2,一个存放运算符,一个存放数字。

2.从左到右扫描中缀表达式,扫到数字就压入s2。

3.扫到运算符:

若栈为空或栈顶元素为‘(’,直接压入s1。

若为‘)’,弹出并压入到s2,直到‘)’,丢弃括号。

若运算符优先级大于此时的栈顶元素,直接压入s1。

若小于,将栈顶元素弹出压入s2,再与新的栈顶元素比较。

4.重复,直到最右边。

5.依次弹出s2,再逆序输出,即为所求。

你可能感兴趣的:(前缀,中缀,后缀表达式)