校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > UI专业知识 > 色彩
题目

假设栈初始为空,将中缀表达式 转换为等价后缀表达式的过程中,当扫描到f时,栈中的元素依次是 () 

A.+(*-

B.+(-*

C./+(*-*

D./+-*

解答

参考答案:B.

基本概念:
在中缀变后缀时,操作数的顺序不会发生变化,只有运算符的顺序可能发生变化。同时又没有括号。所以在转换的过程中,只要碰到操作数,可以直接输出,而遇到运算符和括号进行相应的处理即可。
转换原则如下:
1.从左到右读取一个中序表达式。
2.若读取的是操作数,则直接输出。
3.若读取的是运算符,分三种情况。
A.该运算符为左括号( ,则直接存入堆栈。
B.该运算符为右括号),则输出堆栈中的运算符,直到取出左括号为止。
C.该运算符为非括号运算符,则与堆栈顶端的运算符做优先权比较,若较堆栈顶端运算符高或者相等,则直接存入堆栈;若较堆栈顶端运算符低,则输出堆栈中的运算符。
4.当表达式已经读取完成,而堆栈中尚有运算符时,则依次序取出运算符,直到堆栈为空,由此得到的结果就是中缀表达式转换成的后缀表达式。 

接下来是该题解法:
1.首先 / 入栈
2.+入栈,并把/挤出栈 。此时栈中只有/
3.( 入栈。入栈时 级别最高,所以直接入栈。但是入栈后级别最低。此时栈中只有(+
4 。* 级别高于( (不懂的请看上面的基本概念)。 所以*入栈,此时栈中有*(+
5. -入栈,因为-低于*,所以-把*挤出栈,此时栈中有-(+
6.*优先级高于-,所以*直接入。所以最终栈中从上到下为 *-(+ 从下到上为+(-×



C 1条回复 评论
埃蒙迷路患者

强~~希望更多人更加努力

发表于 2021-09-12 08:05:00
0 0