数据结构基础之后缀表达式与中缀表达式的相互推导

中缀表达式:把平时用的标准四则运算表达式叫中缀表达式
逆波兰表示:一种不需要括号的后缀表达法
一,如何由后缀表达式推导中缀表达式
例子:对于9+(3-1)×3+10÷2,如果用后缀表达式可以表达为9 3 1-3*+10 2 / +
所有的符号都是在要运算数字后面出现。而且没有括号。
后缀表达式运算步骤:继续以上面的表达式为例子
1,初始化一个空栈,此栈用来对要运算的数字进出使用
2,后缀表达式中前三个都是数字,所以9,3,1进栈
3,接着是-,所以将栈中的1作出栈为减数,3出栈为被减数,并运算3-1得到2,再将2进栈。
4,接着是数字3进栈
5,接着到*,栈中3和2出栈,2与3相乘,得到6,再将6进栈。
6,接着到+,所以栈中6和9出栈,9与6相加,得到15,再将15进栈
7,接着是10,2这两个数字进栈
8,接着到/,栈顶的2与10出栈,10与2相除即10÷2,得到5,将5进栈
9,最后到+,将15和5相加,得20

二,如何由中缀表达式推导后缀表达式
规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级模式右括号或优先级不高于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
步骤:以9+(3-1)×3+10÷2为例子
1,初始化一个空栈,用来对符号进出栈使用
2,第一是数字9,输出9,后面是+,进栈。
3,第三个是符号(,因为是左括号还没配对,故先进栈。
4,接着是数字3,输出3,后面是-,进栈。
5,接着是数字1,输出1,后面是符合),因为是右括号,与前面的(相配对,所以栈顶依次出栈并输出,直到(出栈为止,注意的是括号只出栈而不输出,于是得到总的输出表达式为“9 3 1 -”。
6,接着到了符合×,因为此时的栈顶符号为+,×优先级高于+,因此×进栈,+还不用出栈。接着是数字3,输出3,目前的表达式为“9 3 1 -3”。
7,接着到了符号+,此时栈顶是×,栈顶×的优秀级高于想要入栈的+,因此栈中符号元素出栈并输出(没有比±更低的优先级,所以全部出栈),总输出表达式为“9 3 1 -3*+”,然后当前想要入栈的这个+得以入栈。这时栈中就一个符号+。
8,接着的数字10,输出10,表达式为“9 3 1 -3*+10”,后面是符号÷,当前栈顶的+优先级低于想要入栈的÷,当然是阻止不了÷入栈的,所以/进栈。
9,最后一个是数字2,输出2,表达式为“9 3 1 -3*+10 2”
10,已经到最后,所有栈中符号出栈并输出,最终的表达式为“9 3 1 -3*+10 2 / +”。

你可能感兴趣的:(数据结构,四则运算,后缀表达式,中缀表达)