《数据结构》实验指导书.doc
《《数据结构》实验指导书.doc》由会员分享,可在线阅读,更多相关《《数据结构》实验指导书.doc(31页珍藏版)》请在沃文网上搜索。
1、实验指导书课程名称:数据结构计算机科学与工程系数据结构课程组 目 录前 言1一、实验的作用和目的2二、实验方式与考核方式2三、实验要求3四、实验报告要求4五、实验内容5实验一 线性表应用5实验二 栈与队列应用10实验三 二叉树的操作14实验四 图的遍历18实验五 查找算法应用21六、选做实验内容24实验六 排序24实验七 数组和广义表26实验八 串27前 言数据结构数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。这门课程的主要任务是培养学生的算法设计能力及良好的
2、程序设计习惯。通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法(存储结构),以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习操作系统、编译原理、数据库原理等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好数据结构的关键。为了更好地配合学生实验,特编写此实验指导书。实验指导书按照
3、实验教学大纲的要求,为每个主要的知识点精选了的典型的实验题目,对每个实验题目提出具体实现要求,并对算法的实现进行提示,希望对同学实验有所帮助。数据结构课程组2005年5月一、实验的作用和目的实验课是对学生的一种全面综合训练,是与课堂教学、课后练习相辅相成的必不可少的一个教学环节。数据结构是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成一定数量的上机实验作业。通过课程的上机实验,可使学生深刻理解各种逻辑结构、存储结构的特性;学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。 本课程的实验
4、着眼于原理与应用的结合点。通过课程的实验,培养学生分析问题,并能针对实际应用问题选择适用的逻辑结构、存储结构,设计和实现相应算法。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练,培养设计具有专业水准应用程序的能力。 二、实验方式与考核方式课程实验采用课内实验学时与课外实验学时相结合(课外实验学时是课内实验学时的2倍)的方式。本课程的课内实验学时为16学时,要完成的5个实验主要覆盖线性表、栈和队列、树、图、查找五部分内容。每个实验中的题目按类型可分为验证型、设计性、综合实验, 按难度可分为达到“实验设置基本要求”和“实验设置较高要求”的实验。每次实验,每位同学可
5、结合自己的情况,从任课教师布置的题目中选取具体实验题目,按要求完成实验任务。任课教师一般提前2周布置实验任务和具体实验题目。学生要在课下充分了解实验内容,并完成问题分析、算法设计,并利用课外实验学时基本完成程序设计。每个实验的课内实验学时安排同学集中在本系实验室进行,任课教师和实验指导教师针对同学的不同问题分别进行指导,并检查实验完成情况,要求学生回答相关的问题。每次实验完成后,学生需整理实验结果,并完成实验报告。实验成绩从两方面评定:实验完成情况和实验报告质量。实验完成情况:指导教师根据学生的实验准备情况、实验难度、实验完成情况、源程序质量、回答问题情况、实验纪律等方面给分。实验报告书写:学
6、生在实验后的一周内提交打印好的实验报告。教师根据实验报告质量评定成绩。 5 实验总成绩=( 第i次实验成绩) i=1 三、实验要求 问题分析:充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。 数据结构设计:针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。 算法设计:算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,包括考虑如何把程序自顶向下分解成若干顺序模块,并决定模块的接口,
7、即模块间的相互关系以及模块之间的信息交换问题。详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,相当于C语言中具体的函数设计。 测试用例设计:准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。 上机调试并分析结果:对程序进行编译,纠正程序中可能出现的语法错误。测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪。最后,详细记录实验过程,并对实验结果进行分析,并于一周内提交实验报告。 四、实验报告要求1实验报告格式:实验报告首页按学校统一印刷的实验报告模版书写。2实验报告内容:实验基本信
8、息按照实验报告模版要求内容填写,不得有空项。其中: 实验内容按任课教师下达的实验任务填写:包括实验目的、任务、具体实验题目和要求; 实验过程与实验结果应包括如下主要内容: 算法设计思路简介 核心算法设计描述:可以用自然语言、伪代码或流程图等方式 算法的实现和测试结果:包括算法时的输入、输出,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。 附录可包括源程序清单或其它说明(如功能模块之间的调用与被调用关系等) 实验报告雷同者,本次实验成绩为0分或雷同实验报告平分得分五、实验内容实验一 线性表应用一. 实验目的1、 掌握用Turbo C或VC+上机调试线性表的基本方法;2、 掌握
9、线性表的基本操作,如插入、删除、查找,以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;并能够运用线性表基本操作解决问题,实现相应算法。二. 实验学时:课内实验学时:2学时课外实验学时:4学时三备选实验题目1 单链表基本操作练习(实验类型:验证型)1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能: 1建立链表 2连接链表 3输出链表 0结束2)实验要求:在程序中定义下述函数,并实现所要求的函数功能: CreateLinklist( ): 从键盘输入数据,创建一个单链表 ContLinklist( ):将前面建立的两个单链表首尾相连 OutputLinklist( ):
10、输出显示单链表3)实验提示: 单链表数据类型定义(C语言) # include typedef int ElemType; /元素类型 typedef struct LNode ElemType data; struct LNode *next; LNode,*LinkList; 为了算法实现简单,最好采用带头结点的单向链表。4)注意问题: 重点理解链式存储的特点及指针的含义。 注意比较顺序存储与链式存储的各自特点。 注意比较带头结点、无头结点链表实现插入、删除算法时的区别。 单链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解。2 顺序表基本操作练习(实验类型:验证型)1)问题描
11、述: 从键盘输入一组整型元素序列,建立顺序表。 实现该顺序表的遍历。 在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。 判断该顺序表中元素是否对称,对称返回1,否则返回0。2)实验要求: 对应问题描述,在程序中定义4个相应的函数,实现上面要求的函数功能: 在主程序中设计一个简单的菜单,调用上述4个函数3)实验提示: 顺序表存储数据类型定义(C语言) # define MAXSIZE 100 /表中元素的最大个数 typedef int ElemType; /元素类型 typedef struct list ElemType elemMAXSIZE; /静态线性表 int leng
12、th; /表的实际长度 SqList; /顺序表的类型名4)注意问题: 插入、删除时元素的移动原因、方向及先后顺序。 理解不同的函数形参与实参的传递关系。3 约瑟夫环问题(实验类型:综合型)1)问题描述:有编号为1, 2n 的 n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数 m,从第一个人按顺时针方向自1开始报数,报到m者出列,不再参加报数,这时将出列者的密码作为m,从出列者顺时针方向的下一人开始重新自1开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。2)实验要求: 采用顺序和链式两种存储结构实现3) 实现提示: 用顺序表来存储围座者的序号和密码(
13、顺序存储结构).n 用number 和code分别表示围座者的序号和密码.假设围座者人数为 j,当前使用密码为m,开始报数者位置为s, 那么下一出列者位置为s=(s+m-1) mod j.n 当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表的第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若要删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。 用链式存储解决此问题时可以采用循环链表.4)注意问题: 顺序存储和链式存储实现此算法时计算出列位置的不同方法,人员出列后所做操作的区别。4 一元稀疏多项式简单的计算器(实验类型
14、:综合型)1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器2)实验要求: 采用单链表存储结构一元稀疏多项式 输入并建立多项式 输出多项式 实现多项式加、减运算3) 实现提示:以两个多项式相加为例 结果多项式另存 扫描两个相加多项式,若都未检测完:n 若当前被检测项指数相等,系数相加,若结果未变成0,则将结果插入到结果多项式。n 若当前被检测项指数不等,则将指数较小者插入到结果多项式。 若有一个多项式已检测完,则将另一个多项式剩余部分直接连接到结果多项式。5 长整数(任意长度)四则运算演示程序(实验类型:综合型)1)问题描述:设计一个实现任意长的整数进行加法运算的演示程序2)实
15、验要求: 利用双向循环链表实现长整数的存储,给各结点含一个整型变量。任何整型变量的的范围是 -(215-1)(215-1)。 输入和输出形式:按照中国对长整数的表示习惯,每四位一组,组间用逗号隔开。3) 实现提示: 每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表视为万进制数。 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点的树木。相加过程中不要破坏两个操作数链表。两操作数的头指
16、针存于指针数组中是简化程序结构的一种方法。4)注意问题: 不能给常整数位数规定上限。实验二 栈与队列应用一. 实验目的1. 实验设置基本要求:通过实验掌握栈或队列的基本操作的实现,并能灵活运用栈或队列特性,综合运用程序设计、算法分析等知识解决实际问题。2. 实验设置较高要求:理解组成递归算法的基本条件,理解递归算法与相应的非递归算法的区别,理解栈和队列的应用与作用。二. 实验学时:课内实验学时:4学时课外实验学时:8学时三. 备选实验题目1 十进制数N进制数据的转换 (实验类型:综合型)1)问题描述:将从键盘输入的十进制数转换为N(如二进制、八进制、十六进制)进制数据。2)实验要求: 利用顺序
17、栈实现数制转换问题3) 实现提示: 转换方法利用辗转相除法; 所转换的N进制数按低位到高位的顺序产生,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位N进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。4)注意问题: 何时入栈、出栈 算法结束条件2 算术表达式求值演示(实验类型:综合型)1)问题描述:从键盘输入一个算术表达式并输出它的结果2)实验要求:算术表达式可包含加、减、乘、除、十进制整数和小括号,利用栈实现。3) 实现提示: 表达式作为一个串存储,如表达式“3*2-(4+2*1)”,其求值过程为:自左向右扫描表达式,当扫描到3*2时不能马上计算,因后面可能还
18、有更高的运算,正确的处理过程是:n 需要两个栈:对象栈OPND和算符栈OPTR;n 自左至右扫描表达式, 若当前字符是运算对象,入OPND栈;n 对运算符,若这个运算符比栈顶运算符高则入栈,继续向后处理,若这个运算符比栈顶运算符低则从OPND栈出栈两个数,从OPTR栈出栈一运算符进行运算,并将其运算结果入OPND栈,继续处理当前字符,直到遇到结束符。 4)注意问题 重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 注意算法的各个函数之间值的传递情况。3 停车场管理问题(实验类型:综合型)1)问题描述:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场
19、的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车走开,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编写程序模拟该停车场的管理。2)实验要求: 要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车
20、离开停车场时应缴纳的费用和他在停车场内停留的时间3)实现提示:以栈模拟停车场,以队列模拟便道,按照从终端读入的车辆“到达”“离开”信息模拟停车场管理4)注意问题 重点理解栈、队列的算法思想,能够根据实际情况选择合适的存储结构。 栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。4 判断“回文”问题(实验类型:综合型)1)问题描述:所谓回文,是指从前向后顺读和从后向前倒读都一样的字符串。例如,did; pop; I was able 与 elba saw I 等等。2)实验要求:编写程序,利用栈结构判断一个字符串是否是“回文”。3)实现提示: 从左向右遇到的字符,若和栈顶元素比较,
21、若不相等,字符入栈,若相等,出栈。如此继续,若栈空,字符串是“回文”,否则不是。5 用递归和非递归两种方法实现自然数的拆分(实验类型:综合型)1)问题描述:任何大于 1 的自然数 n,总可以拆分成若干大于等于1 的自然数之和。 例: n=4 4=1+3 4=1+1+2 4=1+1+1+1 4=2+2 2)实验要求: 采用递归和非递归两种方法实现 利用交换率得出的拆分看作相同的拆分。3)实现提示: 递归算法:n 用数组a,ak中存储已完成的一种拆分n ak能否再拆分取决于ak/2是否大于等于ak-1;n 递归过程有两个参数:n表示要拆分数值的大小;k表示n存储在数组元素ak中。 非递归算法:(1
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书