数据结构课程设计书教材.docVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
南通大学计算机学院 《数据结构课程设计报告书》 题目: 2.3表达式求值问题 专业: 计算机科学与技术 开始日期: 2013.01.14 完成日期: 2012.01.16 1.问题的描述和分析 1.1问题描述 表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:22 7 4 - * 3 / 11 +)和前缀式(如:+ 11 / * 22 – 7 4 3)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。 1.2 问题分析 选择了栈,在某些运算部分采用了数组。 重点是栈的使用问题,栈是限制只能在表的一端进行插入和删除的线性表,栈顶能进行插入和删除而栈底不允许插入和删除。 难点是使用栈存表达式和让表达式逆序输出这些问题。 2.概要设计 2.1系统模块划分 图2-1 系统模块图 2.2 ADT(抽象数据类型)描述 要求:描述系统所采用数据结构的抽象数据类型,只要说清楚数据对象、数据关系,基本操作集合,切勿复制大量代码,可以参考教材如何定义ADT的。例如: ADT Stack{ 数据对象:D={ai|ai∈ElementSet,i=1,2,…,n,n≥0} 数据关系:R={ai-1,ai|ai-1,ai∈D,i=2,…,n 基本操作: char Precede(char t1,char t2) 进行运算符优先级的比较 int In(char c) 判断输入的c是否是运算符 double Operate(double a,char theta,double b) 进行一次运算 double Val_Exp(char *exp) 进行中缀表达式的求值 (5) void CreatePostExp(char * exp,char * postexp) 中缀表达式求后缀表达式 (6)double Val_PostExp(char *postexp) 后缀表达式求值 (7)void CreatePreFax(char * exp,char * prefax) 中缀表达式求前缀表达式 (8)double Va2_PreFax(char *prefax) 前缀表达式求值 } 3.详细设计 3.1 ADT基本操作算法设计 ADT操作 (1)char Precede(char t1,char t2) 进行运算符优先级的比较 括号优先级高,其实乘除,最后加减 int In(char c) 判断输入的c是否是运算符 double Operate(double a,char theta,double b) 进行一次运算 进行加减乘除运算 double Val_Exp(char *exp) 进行中缀表达式的求值 Step 1:设定两栈,操作符栈和操作数栈; Step 2:栈初始化:设操作数栈为空; Step 3:依次读入字符:若是操作数则入栈; 如果是操作符: 若优先级小于栈顶元素,则退栈、计算,结果压入操作数栈; 若优先级等于栈顶元素,则脱括号; 若优先级大于栈顶元素,则压入操作符栈; (5) void CreatePostExp(char * exp,char * postexp) 中缀表达式求后缀表达式 Step 1:设立暂存运算符的栈; Step 2:设表达式的结束符为“=”; Step 3:若当前字符是操作数,则直接给输出串; Step 4:若当前运算符的优先级高于栈顶运算符,则压栈; Step 5:否则,栈顶运算符出栈; Step 6:“(”对它之前后的运算符起隔离作用,“)”可视为自相应左右括弧的表达式的结束符。 (6)double Val_PostExp(char *postexp) 后缀表达式求值 Step 1:读入表达式的一个字符; Step 2:若是操作数,压入栈,转4; Step 3:若是运算符,从栈中弹出两个数,将运算结果压入栈 Step 4:若表达式输入完毕,栈顶即表达式值; 若表达式未输入完,转1; (7)void CreatePreFax(char * exp,char * prefax) 中缀表达式求前缀表达式 Step 1:求输入串的逆序; Step 2:检查输入的下一个元素; Step 3:假如是操作数,把他添加到输出串; Step 4:假如是闭括

文档评论(0)

美洲行 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档