后缀表达式
后缀表达式格式:
不包含括号,运算符放在两个运算对象的后面.
后缀表达式运算规则:(从左向右)
所有计算均按运算符出现的顺序(不再考虑乘除优先于加减这种运算符的优先规则),严格从左向右进行。
遇到数字直接入栈。
遇到运算符,栈内最上面的两个数字按顺序出栈进行运算。先出栈的数字放在运算符右边,后出栈的数字放在运算符左边
后缀表达式:1.2 1.3 + 2 4.2 * -的值为多少?
遇到数字1.2,入栈.
遇到数字1.3,入栈.
遇到运算符+,栈内最上面的两个数字按顺序出栈进行运算。先出栈的数字放在运算符右边,后出栈的数字放在运算符左边。1.3先出栈,放在+号右边;1.2后出栈,放在+号左边。 即:1.3+1.2 = 1.5,然后再将算出来的结果1.5入栈. (此时栈内数字时1.5,前面入栈的1.2和1.3已经出栈了哦)
遇到数字2,入栈.
遇到数字4.2,入栈. (此时栈内数字为1.5、2、4.2,其中1.5在栈底,4.2在栈顶)
遇到运算符 * ,栈内最上面的两个数字按顺序出栈进行运算。先出栈的数字放在运算符右边,后出栈的数字放在运算符左边。4.2先出栈,放在 * 号右边;2后出栈,放在 * 号左边。 即:2 * 4.2 = 8.4,然后再将算出来的结果8.2入栈. (此时栈内数字为1.5和8.4)
遇到运算符-,1.5和8.4出栈运算,即1.5 - 8.4 = -5.9
所以后缀表达式:1.2 1.3 + 2 4.2 * -的值-5.9?
表达式的转换
中缀表达式格式:
运算符放在两个运算对象之间,如:a*(b+c)/ d
将中缀表达式转换为后缀表达式的规则:(从左向右)
遇到空格,不需处理
遇到运算数,直接输出
遇到左括号,将其压入堆栈
遇到右括号,表明括号内的中缀表达式已经扫描完毕,将栈顶的运算符弹出并输出,直至遇到左括号(左括号也出栈,但不输出)
遇到运算符,若该运算符的优先级大于栈顶运算符的优先级,则把它压栈;若该运算符的优先级小于等于栈顶运算符,则将栈顶运算符出栈并输出,然后再和新的栈顶运算符比较,按照同样的处理方法,直至该运算符大于栈顶运算符优先级为止,然后将该运算符压栈【括号优先级最高,乘除次之,加减最低】 【括号在外面时,优先级是;但括号在栈内,优先级确实最低的】
所有对象处理完毕后,将堆栈内的运算符全部按顺序输出
中缀表达式2 * ( 9 + 6 / 3 - 5 ) + 4
转换为后缀表达式的过程
所以中缀表达式2 * ( 9 + 6 / 3 - 5 ) + 4转换为后缀表达式为2 9 6 3 / + 5 - * 4 +