信管网 > 利用栈对算术表达式10*(40-30/5)+20求值时,存放操作数的栈(初始为空)的容量至少为_() > 网友跟帖  
 

利用栈对算术表达式10*(40-30/5)+20求值时,存放操作数的栈(初始为空)的容量至少为_()[查看全文]

 
 

以下网友评论只代表 信管网网友 个人观点,不代表信管网观点 [发表评论]

 
网友最新跟帖 评论共 0[发表评论]

信管网cnitpm741729533***:   [回复]
1、先将题干的算数(中缀)表达式转换为后缀表达式。具体方式是:从左往右,先把每个算数表达式都加上括号,再依次把运算符移动到本层次的括号后面,最后去掉全部括号。如: 10*(40-30/5)+20→((10*(40-(30/5)))+20)→((10(40(30 5)/)-)*20)+→10 40 30 5 / - * 20 + 2、初始化两个栈,操作数栈和运算符栈,从左往右扫描,若扫描到操作数,压入操作数栈,扫描到运算符或者界限符,压入运算符栈。具体方式: ① 从左往右扫描每一个元素,直到处理完所有元素。 ② 若扫描到操作数,则压入栈,并回到①,否则执行③。 ③ 若扫描到运算符,则弹出两个栈顶元素,执行相应的运算,运算结果压回栈顶,回到①。 根据后上面求得的缀表达式得知操作数入栈顺序为:[10,40,30,5]遇到运算符“/” 则将栈顶元素“5”出栈、“30”出栈执行除法,所得结果“6”压入栈中,此时操作数栈中的元素为[10,40,6]。继续扫描遇到运算符“-”,将操作数栈中的“40”和“6” 出栈,执行减法,所得结果“34”入栈。此时操作数栈中元素是[10,34]。继续扫描,遇到运算符“*” ,将“34”和“10”出栈,执行乘法,所得结果“340”压入操作数栈。此时操作数栈中元素[340]。继续扫描,遇到“20”进行入栈,此时操作数栈中元素是[340,20]。继续扫描,遇到运算符“+”,将“20”与“340”出栈,执行加法,所得结果360入栈。最终操作数栈中的元素是[360]。至此后缀表达式全部处理完毕。由此可知,所需操作数栈的大小至少为4,即能存放“10,40,30,5”这几个操作数才能满足计算要求。

信管网cnitpm687588838***:   [回复]
依次输入10 40 30 5 / - *,保存运算结果后输入 20+ 所以最少要求为4

共有:0条记录,每页20条,当前第1/0页,首页 上一页 | 下一页 尾页
 
  发表评论  
 
 点击刷新 请输入显示的内容