首页 > 试题广场 >

则转换过程中同时保存在栈中的操作符的最大个数是( )。

[单选题]

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

  • 5
  • 7
  • 8
  • 11
写成伪代码是这样:
stack 操作符栈;
for i=1 to n{
	if 当前操作符是操作数
		直接打印;
	else if 当前操作符是操作符{
		if 当前操作符是'('
			压入栈内;
		else if 当前操作符是')'
			不断弹出并打印栈顶元素直至栈顶为'(';
			弹出栈顶;
		else if 当前操作符优先级高于栈顶操作符 || 栈为空
			压入栈内;
		else
			不断弹出并打印栈顶元素直至栈顶优先级不大于当前元素;
			当前操作符入栈;

	}
}
打印栈中剩余操作符; 
优先级从低至高:(、+-、*/、^
回到本题,流程如下:(数字标明当前栈中元素个数)
遇+,入栈,1个
遇-,-的优先级不大于+,弹出+,压入-,1个
遇*,*的优先级大于-,入栈,2个
遇(,入栈,3个
遇(,入栈,4个
遇+,+的优先级大于(,入栈,5个
遇),弹出+,弹出(,3个
遇/,/的优先级大于(,入栈,4个
遇-,-的优先级不大于/,弹出/,压入-,4个
遇),弹出-,弹出(,2个
遇+,+的优先级不大于*,弹出*,压入+,2个
操作符遍历完毕,栈中最后自底而上为-和+,依次弹出。

综上,栈中元素最多的时候有5个。

发表于 2016-12-16 16:37:59 回复(8)
总结了前中后缀表达式的特点,以及相互转换的规则及例子:



编辑于 2019-11-20 16:09:31 回复(3)
如图所示:注意最后一步遍历已经结束,但运算符栈中仍有元素需将剩余元素直接压入操作数栈
发表于 2021-11-21 13:38:10 回复(2)
根据题目只存储操作符:
一开始+入栈,遇到-则+出栈;
-入栈,*入栈,(、(入栈,+入栈,此时栈中元素为5个,是转换过程中同时保存在栈中的操作符的最大个数。
发表于 2016-12-07 09:01:28 回复(0)
首先左括号优先级最高,+-相等,*/相等,+-优先级最低。 遇到操作数,直接输出 遇到操作符,如果比栈顶高(等于不行),或栈顶为左括号,直接入栈。否则一直出栈到可以可以入栈为止。 如果遇到右括号,一直出栈,出栈一个左括号为止。
发表于 2022-01-08 18:19:36 回复(0)

标记:

一个左括号压入栈

一个右括号,连续弹出直到遇到左括号

一个运算符,如果优先级比栈顶元素高,直接压入,否则弹出栈顶元素,将自己压入(两种,优先级低或者同等优先级)

发表于 2019-03-19 19:26:24 回复(0)
根据题目要求,栈中只存储操作符“+”,“-”,“*”,“/”,“(”和“)”,并不存储字母,这一点一定要看清楚。根据中缀表达式a+b-a*((e+d)/e-f)+g,可以利用栈将其转换为后缀表达式ab+acd+e/f-*-g+,在转换过程中,栈中的操作符最多有5个。这种情况出现在第二个“+”号入栈后,栈中的操作符分别为:“-”,“*”,“(”,“(”,“+”。
发表于 2020-05-26 11:11:48 回复(0)
中缀式a+b-a*((c+d)/e-f)中操作符应用的顺序为+/-*+-,其中第一个+为cd之间的,第二个+为ab之间的。转后缀式时,第一个入栈的应该是ab之间的+,在它出栈时,包括它在内,操作符栈内有5个操作法。
发表于 2016-11-28 20:12:59 回复(0)
首先左括号优先级最高,+-相等,*/相等,+-优先级最低。 遇到操作数,直接输出 遇到操作符,如果比栈顶高(等于不行),或栈顶为左括号,直接入栈。否则一直出栈到可以可以入栈为止。 如果遇到右括号,一直出栈,出栈一个左括号为止。
发表于 2018-09-25 23:50:08 回复(0)
栈中的操作符分别为:“-”,“*”,“(”,“(”,“+”,所以是5个
发表于 2017-09-08 10:13:41 回复(1)
右括号不进栈???
发表于 2019-07-30 23:42:23 回复(0)
优先级小于等于需要弹出 等于没注意
编辑于 2018-01-09 19:24:28 回复(0)
优先级高的输出,同等优先级,栈里面的输出 外面的优先级高,压入栈中
编辑于 2017-08-13 10:32:32 回复(0)
发表于 2023-01-03 20:26:12 回复(0)
左括号要入栈的时候优先级比其他运算符要高,但是左括号在栈顶的时候优先级比其他运算符要低。
发表于 2022-03-30 14:51:01 回复(0)
为什么遇到 ) 会弹出 (和+
发表于 2024-03-16 15:17:40 回复(0)
😅题读错了md
编辑于 2024-01-14 17:14:46 回复(0)
如遇同等优先级的也要把栈中的弹出,自己压入
发表于 2019-04-01 19:26:38 回复(0)
a+b-a*((c+d)/e-f)+g 转换为后缀表达式 ab+acd+e/f-*-g+

重复过程:
ab            +
ab+ac      -*((+  5个
ab+acd+e/f-*-g+ 
发表于 2018-06-27 17:53:19 回复(0)
满脑子都是dijkstra那个算法。。。。遇(不计,遇)弹出栈顶元素
发表于 2017-12-08 11:53:21 回复(0)