通过栈将中缀表达式转换为等价的后缀表达式

为什么要从中缀表达式转换为等价的后缀表达式?

        →使后缀表达式包含运算符优先级的信息,方便计算机能理解进行运算。

什么是中缀表达式?

        →中缀表达式虽然是人类看得懂的简单算术形式,但对计算机来说反而复杂难以理解

什么是后缀表达式?  

  →后缀表达式是计算机能理解的形式,后缀表达式是将运算符写在元素(即非运算符)之后。

题目:

已知操作符包括   +,-,*,/,(,)   将中缀表达式   a+b-a*((c+d)/e-f)+g   转换为等价的后缀表达式ab+acd+e/f-*-g+   时,用栈来存放暂时还不能确定运算次序的操作符,若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是( )。
A.5
B.7

C.8
D.11

定义三个东西:

  1. 后缓生成部分【初始值:null】【不需要接受括号】
  2. 运算符栈【初始值:null】
  3. 中缀未处理部分【初始值:a+b-a*((c+d)/e-f)+g】

运算符栈出栈是加在后缓生成部分里的最后一个元素之后的

  1. 当前的中缀未处理部分的第一个元素如果是运算符,就取出该运算符并放进运算符栈里最后一个元素之后,也就是运算符栈的入栈
  2. 当前的中缀未处理部分的第一个元素如果是元素(即非运算符),可以直接加在后缓生成部分里最后一个元素之后。

通过栈将中缀表达式转换为等价的后缀表达式_第1张图片

故经过查看,转换过程中同时保存在栈中的操作符的最大个数是5个,选A

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