c# 四则混合运算算法

本文介绍了如何利用二叉树遍历的知识实现四则混合运算算法,通过中序和后序遍历将表达式转化为后序表达式,并根据运算符优先级进行计算。文中详细讲解了原理,包括将中序表达式转换成后序表达式的方法和运算符优先级的处理,最后提到了逆波兰表达式。

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

对于四则混合运算其实在大三的时候就接触过,但是由于当时自己太菜,只顾着玩游戏跳课了。所以这个算法一直没有用代码实现过。当时学霸还给我简单的讲了一下方法,只因身为学渣的我,只想对学霸说一句,道理我都懂,但是用代码怎么实现的呢。

这次写这个实现四则混合运算功能的原因是,在项目中看到大牛写了一个关于这个的功能,但是他用的是遍历二叉树和递归的原理,并且这段代码是在一个比较大的项目中层次结构比较复杂,实话说,我看得是似懂非懂,所以想自己实现一下,在下面可以提一下我对大牛写的代码的原理的理解,可能不是很对。

今天说的也是利用了二叉树遍历的知识,不过没有对二叉树进行操作,只是利用了二叉树的中序与后序遍历的知识。下面将讲解一下四则混合运算的原理,然后上部分代码。

一 . 原理

1. 中序表达式和后序表达式
例如表达式(A+B)C+E/D,我们试图将它分解,放到一个二叉树中,那么怎么放到一个二叉树中的,我们可以将这个表达式中的元素拆解成三个部分:
(A+B),C,E/D
我们发现A+B是二叉树A+B中序遍历的结果。令A+B的结果是F,则F
C是F*C中序遍历的结果,依次类推,可以得出二叉树如下:
这里写图片描述
我们将这个二叉树进行中序遍历得到的就是如上的表达式。那么为什么要说这个呢。我们光看这个二叉树中序遍历的结果,对这个表达式进行词法分析,是得不出什么算法的。但是我们可以对这个二叉树的后序遍历得到的表达式进行词法分析的。

这个二叉树后序遍历的结果是:AB+CED/+
通过对后序表达式的词法分析,我们令F=A+B,G=F
C,H=E/D,I=G*H,这样我们就可以得到一个解决方法:每次遇到一个操作符,就将操作符的前两个操作数与该操作符进行计算。

现在大概的思路有了,那么中间需要解决的核心问题有如何将中序表达式转换成后序表达式?如何对后序表达式进行计算?那么且往下看。

2. 运算符优先级
首先要说明的是这里的优先级不是四则运算中优先级那么简单。我先列出一张优先级表,然后再说明情况:
这里写图片描述
这个表显示的是栈外的运算符与栈内运算符之间对比的优先级表。
我们可以将上面的表达式入队,然后进行压栈和出栈操作,来得出后序表达式。在表达式后面加一个“#”运算符,那么表达式就是(A+B)*C+

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非正经程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值