为什么要从中缀表达式转换为等价的后缀表达式?
? ? ? ? →使后缀表达式包含运算符优先级的信息,方便计算机能理解进行运算。
什么是中缀表达式?
? ? ? ? →中缀表达式虽然是人类看得懂的简单算术形式,但对计算机来说反而复杂难以理解
什么是后缀表达式? ?
? →后缀表达式是计算机能理解的形式,后缀表达式是将运算符写在元素(即非运算符)之后。
题目:
已知操作符包括? ?+,-,*,/,(,)? ?将中缀表达式? ?a+b-a*((c+d)/e-f)+g? ?转换为等价的后缀表达式ab+acd+e/f-*-g+? ?时,用栈来存放暂时还不能确定运算次序的操作符,若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是( )。
A.5
B.7
C.8
D.11
定义三个东西:
- 后缓生成部分【初始值:null】【不需要接受括号】
- 运算符栈【初始值:null】
- 中缀未处理部分【初始值:a+b-a*((c+d)/e-f)+g】
运算符栈出栈是加在后缓生成部分里的最后一个元素之后的
- 当前的中缀未处理部分的第一个元素如果是运算符,就取出该运算符并放进运算符栈里最后一个元素之后,也就是运算符栈的入栈
- 当前的中缀未处理部分的第一个元素如果是元素(即非运算符),可以直接加在后缓生成部分里最后一个元素之后。
故经过查看,转换过程中同时保存在栈中的操作符的最大个数是5个,选A