《数据结构 课程设计表达式求值 实验报告》由会员分享,可在线阅读,更多相关《数据结构 课程设计表达式求值 实验报告(21页珍藏版)》请在人人文库网上搜索。

1、实验课程名称 级 专业班 名姓 学生 号学 指导 教 师 20至 20 学年第学期第至周 0算术表达式求值演示 1、概述 数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算 法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基 本技能和科学作风方面受到比较系统和严格的训练。 在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的 基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求 值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构。

2、 的理解和认识。 二、 系统分析 1 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符 优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中 运算符栈、运算数栈、输入字符和主要操作的变化过程。 2 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽 象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序, 进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把 运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个 栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。 3 。

3、演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算 机语言的转化。 4 程序执行时的命令: 本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特 殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错 误) 测试数据。5. 1三、 概要设计 一个算术表达式中除了括号、界限符外,还包括运算数据和运算符。由于运算符有优先级别之 差,所以一个表达式的运算不可能总是从左至右的循序执行。每次操作的数据或运算符都是最近输 入的,这与栈的特性相吻合,故本课程设计借助栈来实现按运算符的优先级完成表达式的求值计算。 算法设计 程序包含三个模块 (1。

4、) 主程序模块,其中主函数为 void main 输入表达式; 根据要求进行转换并求值; 输出结果; 体求值。表达式求值模块实现具(2) 换。表达式转换模块(3) 实现转 各个函数之间的调用关系 主函数 表达式转换 数据输入表达式求值 输出 输出 2栈的抽象数据类型定义 ADT SqStack 数据对象:D=a| aElemSet,i=1,2,3,n,n0 i i 数据关系:,a | a ,D,i=1,2,3,,n i-1iii-1R1= using namespace std; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typ。

5、edef struct /运算符栈 char *base; char *top; int stacksize; SqStack1; typedef struct /运算数栈 float *base; float *top; int stacksize; SqStack2; void InitStack1(SqStack1 &S1);/声明栈建立函数 void InitStack2(SqStack2 &S2);/声明栈建立函数 void evaluate(SqStack1 &S1,SqStack2 &S2);/确定如何入栈函数 void Push1(SqStack1 &S1,char e);/声。

6、明入栈函数 void Push2(SqStack2 &S2,float e);/声明入压栈函数 char GetTop1(SqStack1 &S1);/声明取栈顶元素函数 float GetTop2(SqStack2 &S2);/声明取栈顶元素函数 char Pop1(SqStack1 &S1);/声明出栈函数 float Pop2(SqStack2 &S2);/声明出栈函数 char Compare(char m,char n);/声明比较函数 float Operate(float a,char rheta,float b);/声明运算函数 void DispStack1(SqStack1。

7、 &S1);/从栈底到栈顶依次输出各元素 void DispStack2(SqStack2 &S2);/从栈底到栈顶依次输出各元素 /*主函数*/ void main() 4SqStack1 S1;/定义运算符栈 SqStack2 S2;/定义运算数栈 /freopen(data1.in,stdin); /freopen(data1.out,w,stdout); InitStack1(S1);/调用栈建立函数 InitStack2(S2);/调用栈建立函数 evaluate(S1,S2);/调用确定如何入栈函数 潣瑵?按任意键结束!=S1.stacksize)/如果栈满,追加存储空间 S1.b。

8、ase=(char *)realloc(S1.base,(S1.stacksize+STACKINCREMENT)*sizeof(char); if(!S1.base) 潣瑵?存储分配失败!; else S1.top=S1.base+S1.stacksize; S1.stacksize=S1.stacksize+STACKINCREMENT; *S1.top=e;S1.top=S1.top+1;/将元素压入栈中,指针上移 char GetTop1(SqStack1 &S1)/取栈顶元素 char e; if(S1.top=S1.base)cout=S2.stacksize)/栈满,追加存储空间。

9、 S2.base=(float *)realloc(S2.base,(S2.stacksize+STACKINCREMENT)*sizeof(float); 晩?戮獡?潣瑵?存储分配失败!; else S2.top=S2.base+S2.stacksize; S2.stacksize=S2.stacksize+STACKINCREMENT; *S2.top=e;S2.top=S2.top+1;/将元素 e 入栈,指针上移 6 void DispStack2(SqStack2 &S2)/从栈底到栈顶依次输出各元素 float e,*p; if(S2.top=S2.base)coutch; c=c。

10、h0; 7潣瑵?屜n对表达式求值的操作过程如下: =0) e=float(c-48); n+; if(n=1)t=e; else if(n1)t=t*10+e; c=chs+; if(n=-1) e=float(c-48); t=t+e/10; 8c=chs+; if(c=.) n=-1; c=chs+; if(c=0&c9) Push2(S2,t); cout:/栈顶元素优先级高,则退栈并将运算结果入栈 p1=Pop2(S2); p2=Pop2(S2); ch1=Pop1(S1); Push2(S2,Operate(p2,ch1,p1); cout;/否则,栈顶符号优先级高,返回? else。

11、 if(n=*|n=/)/输入的符号为?、屜尯 if(m=)|m=*|m=/)return ;/栈顶元素为尩、?、/,此时栈顶符号优先 级高,返回? else return ;/否则,栈顶符号优先级高,返回? else 输入符号为其他/ #,此时优先级同,返回?元素为if(m=#)return=;/栈顶 ?否则,栈顶符号优先级高else return ;/,返回 theta,floatOperate(float float a,char b)/运算函数 10 float tmp=0; if (theta=+)tmp=a+b;/从运算符栈取出的符号为尫,则运算数栈的两元素相加,并 返回 else。

12、 if(theta=-)tmp=a-b;/从运算符栈取出的符号为?,则运算数栈的两元素相减,并 返回 else if(theta=*)tmp=a*b;/从运算符栈取出的符号为?,则运算数栈的两元素相乘,并 返回 else if(theta=/) /从运算符栈取出的符号为屜尯,则运算数栈的两元素相除,并 返回 if(b=0) cout表达式出错!除数不能为 0!n; else tmp=a/b; return tmp; 五、运行与测试 第六章 总结与心得 数据结构的研究不仅涉及到计算机硬件的研究,而且和计算机软件的研究有着更密切的关系, 无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配。

13、问题。在研究信息检索时也必 须考虑如何组织数据,以便使查找和存取数据元素更为方便。 在课程设计中,应该力求算法简明易懂,而易于转换为上机程序;如果程序反复多次使用,则 应该尽可能选用快速的算法;如果待解决的问题数据量极大,机器的存储空间较小,则在编写算法 时应该考虑如何节省空间。以后在编写程序时就应该注意到所编写程序的时间复杂度,以及是否运 用了良好的算法,而不能只是像以前编写程序时单纯使用 C 语言的知识,要充分考虑程序的性能, 争取编写出更优良的程序来。 让我对数据结构有了更进一步的认识和了解,也让我知道,要想学好它要重在实践,理论与实 际应用相结合,提高了自己组织数据及编写大型程序的能力,培养了基本的、良好的程序设计技能 力。通过实际操作,我也发现我的好多不足之处: (1)用栈的结构来解决表达式的求值,首先要解决的问题是如何将人们习惯书写的表达式转换成计 11算机容易处理的表达式。开始有些茫然,后来通过结合课本和同学的帮助完成了该课题。 (2)对一些看似简单的东西掌握不够熟练,比如由于函数的调用参数问题不熟而造成了调试的困难。 对于语法的掌握也欠缺成熟,需要进一步掌握。 (3)栈的结构理解不够清晰,造成了设计程序时理不清头绪,需要对数据结构有更深层次的理解。 13。

c语言程序设计报告表达式求值,数据结构 课程设计表达式求值 实验报告相关推荐

  1. 数据结构最短路径例题_《数据结构课程设计》最短路径问题实验报告

    <<数据结构课程设计>最短路径问题实验报告>由会员分享,可在线阅读,更多相关<<数据结构课程设计>最短路径问题实验报告(17页珍藏版)>请在人人文库网上 ...

  2. c语言小数表达式运算课程设计,数据结构课程设计表达式计算.doc

    数据结构课程设计表达式计算 福建农林大学计算机与信息学院 计算机类 课程设计报告 课程名称:算法与数据结构课程设计题目:表达式计算姓 名:系:数学系专 业:数学与应用数学年 级:学 号:指导教师:宁正 ...

  3. c语言学生档案管理课设作业,2019-2020年c语言课程设计学生档案管理系统实验报告.doc...

    2019-2020年c语言课程设计学生档案管理系统实验报告.doc 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: *********C 语 ...

  4. C++——算术表达式的求值(数据结构课程设计)

    数据结构课程设计--算术表达式的求值 1.实验目的 1.在课程设计中提高学生的动手能力和编程能力; 2.在课程设计中提高数据结构中理论知识(栈和二叉树等知识)的应用. 3.在课程设计中提高自己对各个方 ...

  5. c语言学生管理系统结点,学生管理系统(数据结构课程设计之完整代码)

    <学生管理系统(数据结构课程设计之完整代码)>由会员分享,可在线阅读,更多相关<学生管理系统(数据结构课程设计之完整代码)(14页珍藏版)>请在人人文库网上搜索. 1.数据结构 ...

  6. 学生选课管理系统c语言程序报告,c语言课程设计学生选课管理系统实验报告.doc...

    课程设计报告 课程设计题目:学生选课管理系统 学 号 姓 名:李唐松 专 业:软件工程 班 级: 091107 指导老师:谢小林 2009年1月5 *实验题目: 学分管理程序 *实验时间与地点:200 ...

  7. 干货干货~C语言版学生成绩管理系统【数据结构课程设计,百行代码实现功能强化版(内附源码)】

    前言 关于这个系统是我们专业要求做的一个课程设计,本来是上个学期交的,我也是上个学期弄好的,打算发出来,但是一直没交上去(怕交上去之前发出来老师说我作弊...),今天就把我做的这个系统分享给大家,不足 ...

  8. 家族关系查询系统程序设计算法思路_大数据结构课程设计(家族关系查询系统)要点...

    实用标准文案 精彩文档 1 课程设计介绍 1.1 课程设计项目简介 家谱是一种以表谱形式, 记载一个以血缘关系为主体的家族世 系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化 遗产,是中华民族 ...

  9. C++课程设计快递业务管理系统实验报告

    一.大型实验的内容 基本要求:能从文件读出快递派送及收件纪录信息,并能将信息保存到文件. 快递业务的信息记录包括:快递单号.快递类别(派送单/收件单).寄送人地址.寄送人电话.寄送人备注信息.收件人地 ...

最新文章

  1. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(4):Clustering(欧式聚类)
  2. c# 实现 加减乘除
  3. header中的参数讲解
  4. 手动建立Mysql表实体类技巧
  5. OI回忆录——一个过气OIer的制杖历程
  6. 机器视觉:嵌入式视觉系统中的接口
  7. 2021年计算机网络工程师真题,2021年计算机四级网络工程师题库完整版完整答案.doc...
  8. 乌班图系统部署jdk
  9. 《电路》邱关源 思维导图 第五章-含有运算放大器的电阻电路
  10. 基于PyQt5实现保存网页为pdf
  11. linux五笔输入法制作_在linux下制作拼音五笔输入法
  12. <学习笔记>从零开始自学Python-之-web应用框架Django( 八)Django表单
  13. dnf超时空漩涡副本路线流程图_DNF超时空漩涡副本怎么过_DNF超时空漩涡副本快速达成图文攻略...
  14. 期刊投稿时,word文档分栏问题
  15. C++ emplace_back
  16. HDMI 之 HPD .
  17. 用html5 js实现浏览器全屏
  18. 设置vscode背景图片
  19. UI设计和平面设计区别是什么?
  20. 基于LSTM的股票价格预测

热门文章

  1. 《金融学》笔记 第八章 中央银行
  2. 希沃展台如何使用_电子白板基本操作及展台使用教程
  3. 黑客入侵你Linux服务器的一万种玩法...
  4. Linux 怎么看端口通不通,判断端口通不通的几种方法
  5. C++基础-拷贝构造函数(深拷贝与浅拷贝)
  6. sendmail报错:My unqualified host name ( name ) unknown; sleeping for retry
  7. Qt模型model、视图view、代理
  8. Alicia Keys and NGB
  9. NLP对数据集进行(词性标注):将所有的词性进行汇总并且编号;将所有的英文词对应的词性转换成编号,得到list
  10. ultraedit php 提示,UltraEdit 支持php文档特殊显示的配置(_php