中缀表达式转后缀表达式:栈中操作符最大个数
转换过程中同时保存在栈中的操作符的最大个数是3。
步骤:
- 初始化一个空栈。
- 从左到右扫描中缀表达式。
- 如果遇到操作数,直接输出到后缀表达式中。
- 如果遇到操作符,则进行以下操作:
- 如果栈为空或栈顶元素是左括号'(',则将该操作符压入栈。
- 如果该操作符的优先级高于栈顶元素的优先级,则将该操作符压入栈。
- 如果该操作符的优先级低于或等于栈顶元素的优先级,则将栈顶元素弹出并输出到后缀表达式中,然后将该操作符压入栈。
- 如果遇到左括号'(',则将它压入栈。
- 如果遇到右括号')',则将栈顶元素依次弹出并输出到后缀表达式中,直到遇到左括号'(',并将左括号弹出。
- 当扫描到中缀表达式的末尾时,将栈中所有剩余的操作符弹出并输出到后缀表达式中。
示例:
将中缀表达式'a+b-a((c+d)/e-f)+g' 转换为等价的后缀表达式'ab+acd+e/f-*-g+'。
转换过程:
| 中缀表达式 | 栈 | 后缀表达式 | |---|---|---| | a | [] | a | | + | '+' | ab | | b | '+' | ab+ | | - | '-' | ab+ | | a | '-' | ab+a | | ( | '(-' | ab+a | | ( | '((-(' | ab+a | | c | '((-(' | ab+a c | | + | '((+(-(' | ab+a c | | d | '((+(-(' | ab+a c d | | ) | '((+(-(' | ab+a cd+ | | / | '((-(' | ab+a cd+e | | e | '((-(' | ab+a cd+e/ | | - | '((-' | ab+a cd+e/f | | f | '((-' | ab+a cd+e/f- | | ) | '-' | ab+a cd+e/f-- | | + | '+' | ab+a cd+e/f--g | | g | '+' | ab+a cd+e/f-*-g+ |
栈中操作符的最大个数:
在转换过程中,栈中同时存在'(-', '+' 和 '-' 三个操作符,因此最大个数为3。
结论:
在将中缀表达式'a+b-a((c+d)/e-f)+g' 转换为等价的后缀表达式时,栈中同时保存在的操作符的最大个数是3。
原文地址: https://www.cveoy.top/t/topic/eC8O 著作权归作者所有。请勿转载和采集!