算法实战5:多种数据结构实现四则运算

本文通过实例介绍了如何使用栈和二叉树实现四则运算。首先,详细阐述了栈实现四则运算的过程,从简单的运算开始,遵循运算符优先级规则逐步计算。接着,讨论了二叉树实现四则运算的方法,强调了二叉树结构在表示运算上的清晰性。文章以不超过个位数的运算为例,提供了不同版本的实现思路。
摘要由CSDN通过智能技术生成

问题还是挺多:

(1)例如输入非运算符没有报错

(2)对于“(2)”这种无法运算

(3)暂时没有加入小数,基于整型运算


-----------------------------------------------------------------

(一)用栈实现四则运算

其实每次看到栈的章节的时候都会拿四则运算做例子,这个确实是个很具体的例子,其实递归也是一种栈的实现,不过是编译器帮我们做好了。

实现这个运算难度也不是很大,大家先别急着就要考虑(2+3*3)/(2^(2+1)-3) 这种蛋疼无比的计算,可先从简单的同类运算开始:

例如:2+3+4

我们计算的时候是这么进行

2先压入栈,然后压入+,再次压入3

这时候压入+号,我们知道这次的+号和上次+号是同个运算优先级,所以我们遵从左-》右的计算顺序,

弹出3、+、2 求出Calc(2,'+',3)  返回结果,压入栈5,以及这次+号,然后压入4 ,运行到结尾,再次出栈4,+,5

计算Calc(5,'+',4);返回9计算完毕


再如:2+3*4+3

同理压入2,+,3,

到达第二个符号的时候,是*号,优先级高于+号,所以继续压入,不弹出。

压入*,4

这时候用遇到+号这种运算符好,我们知道*号的优先级高,所以先计算3*4

然后压入结果栈成为:2+12

这时候判断之前的加号优先级和现在一样,继续出栈计算得栈:4

前面无符号来,加入这时候的+号和3 然后再弹出。。


其实只要遵循这种思路就能把四则运算模拟出来了,当然有人利用两个栈,一个盛放数字,一个是符号

个人比较喜欢直接一个栈

下面我贴出三个版本,就是按照这种由简单-->难,不断完善

版本一看了就好,后面就细节更改,无所谓,而且比较乱。。


//============================================================================
// Name        : CalcSimu.cpp
// Author      : YLF
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;

int CalcSimu(char *str);
int Calc(char num1,char opt,char num2);
int Level(char c);
int CalcSimu2(char *str);
int Calc2(int num1,int opt,int num2);
int Level2(char c);
int CalcSimu3(char *str);
int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值