《数据结构上机实验指导书.docx》由会员分享,可在线阅读,更多相关《数据结构上机实验指导书.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一部分 算法与数据结构课程实验概述一实验目的算法与数据结构是计算机专业的主干课程和必修课程之一,其目的是让大家学习、分析和研究数据对象特征,掌握数据组织方法和计算机的表示方法,以便选择合适的数据逻辑结构和存储结构,设计相应的运算操作, 把现实世界中的问题转化为计算机内部的表示与处理的方法,要求掌握算法的时间、空间复杂度分析基本技术,培养良好的程序设计风格,掌握进行复杂程序设计的技能。在计算机科学领域,尤其是在系统软件和应用软件的设计和应用中要用到各种数据结构,因此,掌握数据结构对提高软件设计和程序编制水平有很大的帮助。二实验要求2.1 实验步骤设计步骤的规范不但可以培养学生科学的工作方法和作
2、风,而且还能有效地减少错误,提高工作效率。因此必须严格执行良好的实验步骤规范(包括上机操作规范)。本课程实验的基本步骤是:2.1.1 问题分析充分地分析和理解问题本身,明确问题要求做什么。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如; 输入、输出数据的类型、值的范围以及形式等。同时为调试程序准备好测试数据,包含合法的输入数据和非法形式输入的数据。2.1.2 设计和编码设计即是对问题描述中涉及的操作对象定义相应的数据类型,定义主程序模块和各抽象数据类型;定义相应的存储结构并写出各过程和函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、
3、简单和易于调试。编码即把详细设计的结果进一步求精为程序设计语言程序,写出源程序。对程序中的疑问应作出记号,以便上机时注意解决。每个明确的功能模块程序一般不超过 60 行,程序的每一行不得超过 60 个字符,否则要进一步划分。2.1.3 上机前程序静态检查上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。把程序中的明显错误事先排除。2.1.4 上机调试程序上机实验时要带上C 语言教材、数据结构教材、数据结构上机实验指导书,调试最好分模块进行,自底向下,即先调试低层过程或函
4、数。调试过程中应多动手确定疑点,通过修改程序来证明。调试正确后,认真整理源程序及其注释,写出或打印出带有完整注释的且格式良好的源程序清单和结果。2.1.5 完成上机实验报告1. 需求分析以无歧义的陈述说明程序设计的任务,强调程序要做什么。明确规定:(1)输入的形式和输入值的范围;(2) 输出的形式(3) 程序所能达到的功能(4) 测试数据:包括正确的输入及其输出结果,含有错误的输入及其输出结果。2. 系统设计1. 说明本程序中用到的所有抽象数据类型的定义;2. 主程序的流程以及各程序模块之间的层次调用关系,画出函数的调用关系图。3. 列出各个功能模块的主要功能及输入输出参数。3调试分析内容包括
5、:(1)调试过程中遇到的问题是如何解决的及对设计与实现的回顾讨论与分析。(2) 算法的时间复杂度分析(包括基本操作和其他算法)和改进设想;(3) 经验与体会等。4测试结果列出你的测试结果,包括输入与输出,这里的测试数据应完整和严格,可用需求分析中的测试数据。5、用户手册说明如何使用你编写的程序,详细列出每一步操作步骤。6、附录即带注释的源程序清单和结果。除原有注释外再加一些必要的注释和断言(关键语句或函数功能的注释)。 对填空和改错题还要写出正确答案,如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其它测试数据及其运行输出。2.4 考核及评分办法上机实验成绩根据上机考勤
6、、调试情况、实验报告评分,分为五级制: 优、良、中、及格、不及格。序实实验名称内容提要验实验时每组人数号1设计实现一个一元稀疏多1线性表,栈,队项式计算器列2. 表达式求值用二叉树来表示代数表达2树和二叉树式求二叉树中从根结点到叶子节点的路径3图图的存储与遍历验证44-54排序与查找内排序方法的比较二叉排序树验证44-5第二部分上机实验内容类型数设计84-5综合84-5实验一线 性 表,栈和队列一、 实验目的1. 了解线性表,栈和队列等线性结构的特性,以便灵活应用。2. 熟练掌握线性表,栈和队列的各种操作和应用二、实验内容1. 分别用线性链表和队列设计实现一个一元稀 疏多项式计算器问题描述设计
7、一个一元稀疏多项式简单计算器。基本要求1. 用带表头结点的单链表存储多项式,多项式的项数存放在头结点中。2. 用链式队列存储多项式。多项式的项数存放在队列头结点中。一元稀疏多项式简单计算器的基本功能是:(1) 输入并建立多项式;(2) 输出多项式,输出形式为整数序列:n,c1,e1, c 2,e2, cn,en,其中 n 是多项式的项数,ci,ei,分别是第 i 项的系数和指数,序列按指数降序排序;(3) 多项式 a 和 b 相加,建立多项式 a+b;如果用单链表存储多项式, 则用 a 存储多项式(a+b)。如果用队列存储多项式,则需为多项式(a+b)另外创建一个队列。(4) 多项式a 和 b
8、 相减,建立多项式 a-b;如果用单链表存储多项式,则用 a 存储多项式(a+b)。如果用队列存储多项式,则需为多项式(a+b)另外创建一个队列。(5) 计算多项式在x 处的值。(6) 计算器的仿真界面。测试数据(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3)(3)(1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1)(4)(x+x3)+(-x-x3)=0(5)(x+x2+x3)
9、+0=( x3+ x2+ x)2. 算术表达式求值:设计一个程序,演示用算符优先法对算术表达式求值的过程。【问题描述:】设计一个算术表达式计算器。基本要求以字符序列的形式从终端输入语法正确的、不含变量,带括号的中缀整数表达式。利用下表给出的算符优先关系,应用运算符栈、运算数栈实现对算术四则混合运算表达式的求值。算符优先关系表(1、2 是相邻算符,1 在左,2 在右)表达式中任何相邻运算符 q1、q2 的优先关系有:q1 q2:q1 的优先级 高于 q2测试数据3(7-2)/(32-17) (23+45)实验二树和二叉树一、 实验目的1. 掌握二叉树,二叉树排序数的概念及存储方法。2. 掌握二叉
10、树的遍历算法。3. 熟练掌握编写实现树的各种运算的算法。二、实验内容1. 用二叉树表示代数表达式并输出代数表达式的前缀式和后缀式要求及提示:编写一个程序,用二叉树来表示代数表达式,树的每个结点包括一个运算符, 代数表达式由输入得到(其中只包含=,+,-,*,/和用一个字母表示的数且没有错误,并且按照先乘除后加减的原则),试编写程序输出表达式的前缀式和后缀式。实验数据:X:=(-b+(b2-4*a*c)0.5)/(2*a):=*/+*2a-b-0.5*b2*c4a2. 求二叉树中从根结点到叶子节点的路径要求及提示对于 1 中的代数表达式二叉树,分别用递归和非递归的方法编写程序完成如下功能:1.
11、输出所有的叶子结点的数据项值。2. 输出所有从叶子节点到根结点的路径实验三图一、 实验目的1. 熟悉图的各种存储方法。2. 掌握遍历图的递归和非递归的算法。3. 理解图的有关算法。二、 实验内容1实现图的邻接矩阵和邻接表存储要求及提示对于下图所示的有向图G,编写一个程序完成如下功能:1. 建立G 的邻接表存储结构2. 输出下图的拓扑排序序列3. 编写一个程序输出从顶点 0 开始的深度优先遍历序列(递归算法)和广度优先遍历序列(非递归算法)。实验四查找和排序一、 实验目的1. 掌握顺序查找,二分法查找,分块查找的算法。2. 掌握各种排序算法及其性能的比较二、实验内容1编写一个程序输出在顺序表13,22,35,43,54,68,71,82,98,1005中采用顺序方法和折半方法查找某个关键字的过程。2编写一个程序实现直接插入排序过程,并输出94,28,57,66,35,84,63,42,71,10的排序过程3编写一个程序实现快速排序算法,并输出94,28,57,66,35,84,63,42,71,10的排序过程。
限制150内