栈与表达式求值

1.任务:

输入语法正确的表达式,求值

操作数:123456789    double      操作符:+  -  *  /    (    )       char     

2.核心思想:  

(1).应用栈,链栈。一个栈存储操作数,一个栈存储操作符。

(2).把输入的表达式存储在字符数组中,再扫描数组。

a.如果是操作数,入操作数栈;

b.如果是操作符,若栈顶操作符为空则将当前操作符直接入栈;否则比较扫描的当前操作符和栈顶操作符 ;

栈顶操作符一定比当前操作符先出现

比较规则:

同级运算从左到右;

先乘除,后加减

先括号内再括号外

得到一个栈顶操作符与当前操作符优先级的表:

'<'栈顶优先级较低
 '='左右括号相遇
 '>'栈顶优先级高

c.若栈顶优先级低则将当前操作符直接入栈;

 

若左右括号相遇(栈顶是左括号,当前是右括号)则将栈顶括号出栈,当前括号不作处理;

 

若栈顶优先级高,则弹出栈顶操作符,第一次弹出栈顶数b作为第二个     (算式 的操作数),

第二次弹出栈顶数a作为第一个     (算式 的操作数),例a+b

计算完成后将结果入操作数栈,扫描指针减一使得当前操作符和栈顶操作符再比较一次,因为栈顶操作符已经变化了。

(3)扫描完成后,再

弹出栈顶操作符,第一次弹出栈顶数b作为第二个(算式 的操作数),

第二次弹出栈顶数a作为第一个(算式 的操作数),计算一次,因为操作符栈可能有剩一个操作符没处理。

(4)最后操作数栈的那个元素就是表达式计算结果

3.学习收获

(1)有关链栈的初始化,入栈,出栈,判空,获取栈顶元素的操作熟悉

(2)c++的值传递与引用传递的区别

(3)vs2019操作界面的熟悉

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值