首页 > 编程知识 正文

前缀表达式中缀表达式后缀表达式转化,后缀表达式与中缀表达式

时间:2023-05-04 22:54:27 阅读:264004 作者:4292

前缀表达式/中缀表达式/后缀表达式 中缀表达式就是平常的表达式,如(3+4)*5-6=29前缀表达式又称为波兰式,也就是运算符位于数字前面,如 -*+3456后缀表达式又称为逆波兰式,也就是运算符位于数字后面,如 3 4 + 5 × 6 - 后缀表达式转中缀表达式,ab+cd+* 后缀表达式转为中缀表达式要点:遇到操作数都进栈,等到碰到运算符就把栈顶两个元素出栈,运算后再入栈,直到结束。1. a入栈,b入栈,`栈为 a b`2. 遇到运算符+,b出栈,a出栈,运算为(a+b),再入栈,栈为`(a+b)`3. c入栈,d入栈,栈为`(a+b) c d`4. 遇到运算符+,d出栈,c出栈,运算为(c+d),入栈,结果为`(a+b) (c+d)`5.遇到运算符*,栈顶两个元素出栈,运算结果为(a+b)*(c+d) 后缀表达式转中缀表达式,“3 4 + 5 × 6 -” => ((3+4)*5)-6 => 29 中缀表达式转为后缀表达式(从左到右扫描)分为两个栈,结果栈和运算栈,遇到的情况有 1. 如果是操作数(数字、字母),则进入结果栈2. 如果是左括号,那么入运算栈;3. 如果是右括号,那么把运算栈的栈顶元素出栈,入栈到结果栈,知道遇到左括号,遇到左括号后,这一对括号都消灭4.1 如果是运算符,如果运算栈为空,那么入栈4.2 如果是运算符,此时运算栈顶运算符不为左括号!!!,且栈里不存在优先级大于或等于该运算符的运算符,则该运算符入栈,否则大于等于该运算符的其他运算符先出栈再入栈到结果栈4.3 如果是运算符,此时栈顶运算符是左括号,那么入栈 已知一算数表达式的中缀表达式为 a*f+(b-c/d)*e,其后缀形式首先a是操作数,进结果栈;结果栈为 a 是运算符,运算栈空,进运算栈 f是操作数,进结果栈 结果栈为 a f+是运算符,但是栈中存在优先级大于等于的*,所以 * 先出栈,然后 * 入运算栈 结果栈为 a f *(是左括号,入运算栈,运算栈为 + (b是操作数,入结果栈,结果栈 a f * b-是运算符,栈顶元素是左括号,所以-入运算栈 运算栈 + ( -c是操作数,入结果栈, 结果栈 a f * b c/是运算符,运算栈顶元素不是左括号,运算栈 + ( -不存在优先级大于等于 / 的元素,所以 / 入运算栈d是操作数,d入结果栈,结果栈 a f * b c d)是右括号,所以运算栈的栈顶元素出栈,知道左括号,入栈后进到结果栈此时运算栈是 + ( - / ,所以结果栈变为 a f * b c d / -,运算栈变为 +,左右括号消灭了然后*是运算符,运算栈中不存在大于等于的元素,所以入运算栈,运算栈为+ *e是操作数,e入结果栈,结果栈为a f * b c d / - e,扫描结束,所以运算栈全部出栈到结果栈,为 a f * b c d / - * +

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。