- 87
- 0
- 约7.61千字
- 约 12页
- 2017-05-21 发布于浙江
- 举报
数据结构 四则运算表达式求值 实验四报告
HUNAN UNIVERSITY
实验四最终报告
题 目: 四则运算表达式求值
学生姓名
学生学号
专业班级
指导老师 李晓鸿
完 成 日 期 2014年5月8日
需求分析
本程序要求把用户输入的中缀四则算术表达式,转化为后缀表达式,并计算出结果,然后输出到DOS界面。
输入形式:
21+23*(12-6)
处理非法操作,对输入表达式含有两个连续的运算符、除数为0、括号不匹配的非法输入报错。
输出形式:
输入表达式正确时,输出转换后的后缀表达式,显示计算结果。
输入表达式错误时,对相应的非法输入显示报错的提示。
程序功能:用二叉树实现四则运算表达式的求值,并把输入的中缀四则运算表达式转换成后缀表达式后,计算结果输出。
测试数据
包含合法输入和非法输入的情况后,共有四种情况:
输入:21+23*(12-6)
输出:后缀表达式为:23 12 6 -*+
result is 159
输入:((1+2)*3
输出:错误!括号不匹配!
输入:12-5/0
输出:后缀表达式为:32 5 0 / +
错误!除数不能为0!
输入:1++3*3
输出:错误!不能有连续的两个运算符!
二、概要设计
抽象数据类型
使用二叉树实现四则运算表达式的求值,为本问题确定一个树型关系,数据对象为树的每一个结点。因为表达式中会含有实数和字符,所以树每一个结点将要存放的数据既可能为实数也可能为字符。在创建二叉树时,用两个堆栈先分别存储字符和操作数,根据操作数和操作符间的运算关系,把操作数和操作符存储到二叉树的结点中。
根据算术运算的普遍规律,我们为程序中所存储的操作数定义为浮点型变量。
二叉树节点BinNode的ADT:
数据对象:Elem
基本操作:
void setVal(const Elem e) {it = e; }
inline BinNode* left() const =0; {return lc;} //返回左子节点的节点信息
inline BinNode* right() const =0; {return rc;}//返回右子节点的节点信息
二叉树BiTree 的ADT:
数据对象D:D是BinNode类的数据元素的集合
数据关系R:
若D为空集,则称为空树 。
否则:
(1) D中存在唯一的称为根的数据元素root;
(2) 当n1时,其余结点可分为m (m0)个互不相交的有限集T1, T2, …, Tm棵子集本身又是一棵符合本定义的树,称为根root
基本操作:
void creatTree(BinNodePtr*,char*); //创建二叉树
void postTraver(BinNodePtr*,char*,int); //后序周游二叉树
int creatNode(StackBinNodePtrchar ** ,char * ); //创建存储操作数的叶子节点
void creatSub(StackBinNodePtrchar* ,char);//创建存储操作符的节点
堆栈的ADT:
数据对象D:D是BinNode类的数据元素的集合
数据关系:R={ai-1 ,ai|ai-1,ai∈D,i=1,2,3….n}
基本操作:
bool push(const BinNode item); //入栈
bool pop(BinNode it); //出栈
bool topValue(BinNode it) const; //获取栈顶的值
int length() const; //栈的长度
算法的基本思想
构建二叉树,把输入的表达式存储在字符数组中,遍历字符数组把字符压入一个栈中,并逐个弹出栈中字符,根据字符的ASCⅡ判断字符表示数字或者运算符。若字符表示数字时,二叉树中以左子树表示第一操作数,右子树表示第二操作数,为她创建一个叶子结点保存,并把结点压入操作数栈中;若字符为运算符,并且运算符优先的情况下,把运算符存储为子结点的根结点,压入运算符栈中,直至栈为空。对二叉树进行后续遍历,可以得到后缀表达式。
运算时,运算符栈顶弹栈,然后获取操作数栈顶和次栈顶的值进行运算,把运算结果创建一个叶子结点
您可能关注的文档
- 数据库专周实验报告《图书管理系统》.doc
- 数据库原理与应用2_2011122766_张维凤.pdf
- 数据库原理及应用实验指导书2016.pdf
- 数据库原理实验(sql server 2005).pdf
- 数据库原理实验--扩充练.pdf
- 数据库原理实验报告2012.doc
- 数据库原理简单的数据库系统设计——图书管理系统041440516董迎顺.doc
- 数据库原理课程设计报告-工资管理系统.doc
- 数据库及其应用实验报告2.docx
- 数据库图书管理系统实训报告.docx
- GB/T 42818.2-2026认知无障碍 第2部分:报告.pdf
- 中国国家标准 GB/T 47116-2026地下采矿机械 工作面移动式采掘机械 采煤机和犁式系统的安全要求.pdf
- 《GB/T 47116-2026地下采矿机械 工作面移动式采掘机械 采煤机和犁式系统的安全要求》.pdf
- 中国国家标准 GB/T 42818.2-2026认知无障碍 第2部分:报告.pdf
- 《GB/T 42818.2-2026认知无障碍 第2部分:报告》.pdf
- 《GB/T 27664.1-2026无损检测仪器 超声检测设备的性能与检验 第1部分:仪器》.pdf
- 中国国家标准 GB/T 27664.1-2026无损检测仪器 超声检测设备的性能与检验 第1部分:仪器.pdf
- GB/T 27664.1-2026无损检测仪器 超声检测设备的性能与检验 第1部分:仪器.pdf
- GB/T 45305.5-2026声学 建筑构件隔声的实验室测量 第5部分:测试设施和设备的要求.pdf
- 中国国家标准 GB/T 45305.5-2026声学 建筑构件隔声的实验室测量 第5部分:测试设施和设备的要求.pdf
原创力文档

文档评论(0)