- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计--表达式求值问题
课程设计(论文)
题 目 名 称 表达式求值问题
课 程 名 称 数据结构课程设计
学 生 姓 名 XXX
学 号 xxxxxxxxx
系 、专 业 信息工程系、信息工程类
指 导 教 师 xxxxxx
2010年 1 月 3 日
目 录
1 问题描述 2
2 需求分析 2
3 概要设计 2
3.1抽象数据类型定义 3.2模块划分 4 详细设计 4
4.1数据类型的定义 4.2主要模块的算法描述 5 测试分析 7
5.1 7
5.2.8
6 课程设计总结 8
参考文献 8
附录(源程序清单) 9
1 问题描述
编写一个表达式求值程序,使输入一个四则运算表达式后,能够返回正确的结果。该表达式由数字0~9、+、-、*、/、括号组成,且表达式必须正确无误。程序的编写可用到栈或队列的基本算法,求出该表达式的值,并分析算法的时间复杂度和运算的结果。
2 需求分析
(1)为实现算符优先算法,可以使用两个工作栈。一个称做OPTR,用以寄存运算符;另一个称做OPND;用以寄存操作数或运算结果。算法的基本思想是:
①首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;
②依次读入表达式中每个字符,若是操作数则OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较优先权后做相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为#)。
(2)该程序实现表达式的求值问题:
从键盘读入一个合法的算术表达式,利用算符优先关系,实现对算术四则混合运算的求值,输出正确的结果。
3 概要设计
3.1抽象数据类型定义
设定栈抽象数据类型的定义采用两个栈的入栈与出栈的操作来进行“运算符和操作数的配对”。程序中主要用到以下抽象数据类型:
1)ADT Stack {
数据对象:D={ ai | ai ∈ElemSet, i=2,...,n,
n≥0 }
数据关系:R1={ ai-1, ai | ai-1, ai∈D, i=2,...,n }
约定an 端为栈顶,a1 端为栈底。
基本操作:
(1)InitStack(S)
操作结果:构造一个空栈S。
(2)GetTop(S, e)
初始条件:栈S已存在且非空。
操作结果:用e返回S的栈顶元素。
(3)Push(S, e)
初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。
(4)StackEmpty(s)
初始条件: 栈S已存在。
操作结果:若S为空栈,则返回TRUE, 否则返回FALSE
(5)Pop(S, e)
初始条件:栈S已存在且非空。
操作结果:删除S的栈顶元素,并用e返回其值。
} ADT Stack
3.2模块划分
本程序包括个模块:
(1)主模块
void main()
{ }
(2)(3)
三模块之间简单调用关系:
图3.2 模块调用图
4 详细设计
4.1数据类型的定义
()栈类型#define MAXSIZE 100
typedef int elmtype;
struct sqstack
{
elmtype stack[MAXSIZE];
int top;
};
()类型char ch[7]={+,-,*,/,(,),#};
(3)运算符号优先级类型
int f1[7]={3,3,5,5,1,6,0};/*栈内元素优先级*/
int f2[7]={2,2,4,4,6,1,0};/*栈外元素优先级*/
4.2主要模块的算法描述
该程序主要由主函数模块、表达式求值模块、表达式转换模块三个个部分组成。
(1)主函数及表达式求值模块
void main()
{
int result;
result=EvaluateExpression(); /*对EvaluateExpression()进行调用*/ }
(2)表达式求值模块
主函数只调用了EvaluateExpression()函数;而其他的函数则由EvaluateExpression()调用了,因此使得主函数十分简洁明了。其中求值函数流程图如下:
图4.2 表达式求值模块流程图
(3)表达式转换模块
vo
原创力文档


文档评论(0)