栈与表达式求值

1.任务:

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

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

2.核心思想:  

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

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

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

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

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

比较规则:

同级运算从左到右;

先乘除,后加减

先括号内再括号外

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

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

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

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

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

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

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

(3)扫描完成后,再

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

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

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

3.学习收获

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

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

(3)vs2019操作界面的熟悉

发布了13 篇原创文章 · 获赞 13 · 访问量 7342

猜你喜欢

转载自blog.csdn.net/lvdoujack/article/details/91445876