算法表达式求值演示

2017/10/18

关于算法表达式求值演示(中缀表达式)的project

在这里把代码和我的一些编程过程的体会写下来,虽然都是一些很简单的东西,但是coding的过程体会很重要。

 

project的主要要求是完成1.算法表达式求值演示2.运算符集的扩充(主要包括乘方运算之类的吧^)3.完成赋值运算

参考书目《数据结构》严蔚敏

 

算法的基本思想:1.通过栈来实现,可以使用两个工作栈,一个OPTR用于存储运算符(char型);另一个OPND 用于存储操作数和运算结果(我自己用的是double型,int也可以吧,只是涉及到一些运算int就不太够用)2.首先置操作数栈(OPND)为空栈,将‘#’压入运算符栈(OPTR)栈底 3.依次读入表达式中的每个字符(串),若是操作数则进入操作数栈(OPND);若是运算符,则将运算符与运算符栈顶元素进行优先权比较后再进行相应操作(过程三言两语说不太清楚...具体看代码实现) 4.运算符简的优先关系(代码)

 

代码部分:

//算术表达式求值.cpp

#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include "Stack.h"//因为要求stack要自己实现,所以是自己写的简单的stack类也可以直接include<stack>
using namespace std;


int Precede(char a, char b)
{//运算符优先关系的比较,返回1表示a的优先权高于b,0表示优先权相等,-1表示a的
switch (a)
{
case '+':
if(b == '+' || '-' || ')' || '#')
return 1;
else
return -1;
break;

case '-':
if(b == '+' || 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
表达式求值算法基本思路如下: 1. 将中缀表达式转换为后缀表达式。 2. 从左到右扫描后缀表达式,遇到数字时,将数字压入中;遇到运算符时,弹出顶的两个数字进行运算,并将结果压入中。 3. 重复步骤2,直到表达式的最右边。 4. 最后中只剩下一个数字,即为表达式的结果。 下面是一个例子,演示如何使用上述算法求解中缀表达式的值: 假设我们要求解的中缀表达式为:3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3 1. 将中缀表达式转换为后缀表达式:3 4 2 * 1 5 - 2 3 ^ ^ / + 2. 从左到右扫描后缀表达式,遇到数字时,将数字压入中;遇到运算符时,弹出顶的两个数字进行运算,并将结果压入中。 - 扫描到3,将3压入中。 - 扫描到4,将4压入中。 - 扫描到2,将2压入中。 - 扫描到*,弹出2和4,计算4*2=8,将8压入中。 - 扫描到1,将1压入中。 - 扫描到5,将5压入中。 - 扫描到-,弹出5和1,计算1-5=-4,将-4压入中。 - 扫描到2,将2压入中。 - 扫描到3,将3压入中。 - 扫描到^,弹出3和2,计算2^3=8,将8压入中。 - 扫描到^,弹出8和-4,计算-4^8=-65532,将-65532压入中。 - 扫描到/,弹出-65532和8,计算8/-65532=0,将0压入中。 - 扫描到+,弹出0和3,计算3+0=3,将3压入中。 3. 重复步骤2,直到表达式的最右边。 4. 最后中只剩下一个数字,即为表达式的结果,本例中结果为3。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值