题13

题目

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

分析

在中缀表达式转后缀表达式的过程中, 扫描到操作数时直接输出, 扫描到操作符时根据其优先级进行相应的出入栈操作。有几点需要注意: ①若遇到界限符 “ ”, 则直接入栈; ②若遇到界限符 “) ”, 则不入栈, 且会依次弹出栈顶运算符, 直到遇到 “ (” 为止, 并删除 “ (”; ③若当前运算符的优先级高于栈顶运算符或者遇到栈顶为 “ ”, 则直接入栈; ④若当前运算符的优先级低于或等于栈顶运算符,则依次弹出,直到遇到一个优先级高于它的运算符或者遇到 “ ( ” 为止, 之后将当前运算符入栈。
求栈中操作符的最大个数时, 为简单起见, 可省略对操作数的处理。

A