Problem 2062 --算法3-4:表达式求值

2062: 算法3-4:表达式求值

"
Time Limit $1$ 秒/Second(s) Memory Limit $512$ 兆字节/Megabyte(s)
提交总数 $163$ 正确数量 $294$
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签 数据结构
算数四则运算的规则是1)先乘除,后加减;2)从左算到右;3)先括号内,后括号外。
由此,算式4+2*3-10/5的计算顺序为4+2*3-10/5=4+6-10/5=4+6-2=8。
给定一个以“#”作为结束符的算式,求出算式的结果。
给出严蔚敏《数据结构(C语言)》中的一段算法描述以作参考:
图1:表达式求值算法
图2:表达式求值算法(续)

3:表达式求值算法(续)

以“#”结尾的表达式,运算数为正整数。每个表达式占一行。

输出表达式运算的结果。

4+2*3-10/5#
3*(7-2)#
2*3/2#
8
15
3
提示:
使用栈来解决本题,很多人都会想到。但怎样建栈,却带来了问题。同样,严书上的代码实际上也给大家带来了问题。看过严书光盘中代码的人应该知道,代码中使用了两个栈,一个是存储运算符的,类型为char;另一个存储运算数,类型为float。而操作两个栈的函数都一样。要知道,除非像C++中使用泛型,C语言中却基本不能实现这样的操作。所以在C语言环境中需要将这两个栈结合在一起。由于char与int有种特别的联系,可以使用int来代替char存储运算符。
总结:
注意灵活运用栈,要是能够学习C++使用template就更好了。可以模拟STL了。

推荐代码 查看2062 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[$0 $ms] sqrjy 607572 2020-07-17 11:02:19
内存最少[$956 $KB] 范晋豪@信息与计算科学142 152675 2017-11-16 15:10:13
第一AC 范晋豪@信息与计算科学142 152674 2017-11-16 15:10:13
第一挑战 范晋豪@信息与计算科学142 152674 2017-11-16 15:10:13

赛题来源/所属竞赛 数据结构高分笔记 数据结构高分笔记

竞赛编号 竞赛名称 竞赛时间 访问比赛
1771 2023-2024-1学期<编译原理> 第15-17周练习:图算法、中间代码生成优化实验【21计算机1234】 2023-12-11 09:00:00 请登录
1749 2022-2023-2学期<编译原理> 第15-17周练习:中间代码,代码生成和优化实验【20计算机12345】 2023-05-29 00:00:00 请登录