数据结构--计算简单的表达式

本文介绍了一种通过转换为逆波兰表达式来计算数学表达式的方法,并提供了具体的C语言实现。该方法首先定义了运算符的优先级,利用栈结构进行表达式的转换和计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表达式的计算主要思路是先将表达式转换为逆波兰式,然后用逆波兰式计算。为了简单的说明逆波兰式是怎么计算的,这里的算术表达式只包含+-*/四种运算,也没有括号,也没有考虑第一个数为负的情况,所以很简单。

1.计算逆波兰表达式:输入为一个算术表达式,以=结束,然后计算其逆波兰表达式。想法很简单,定义优先级,*/的优先级要高于+-,建立一个运算符栈。顺序扫描表达式,如果是数的话,输出。如果是运算符,判断当前的操作符和栈顶的操作符的优先级,如果当前运算符的优先级大于栈顶运算符的优先级,将当前运算符入栈;反之将栈顶的操作符输出,然后当前的操作符入栈;遇到=时将弹出栈中所有操作符。比如2+3*4+3=:1.输出2;2.将+入栈;3.输出3;4.*>+,将*入栈;5.输出4;遇到+,输出*,+,然后将+入栈。6.输出3;7.输出+.

最后输出为:234*+3+

2.计算逆波兰表达式。思路:如果是数,入栈,如果是运算符,弹出两个操作符,进行操作,将操作结果入栈。如上所述234*+3+,步骤为:2入栈,3入栈,4入栈,遇到*,将4和3弹出,计算结果为12,将12入栈,+将12和2弹出,计算14,将14入栈,遇到3,将3入栈,遇到+将3和14弹出,计算。结果为17。

以下是一个具体实现:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值