数据结构实验报告答案.docx
- 文档编号:3477689
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:70
- 大小:94.60KB
数据结构实验报告答案.docx
《数据结构实验报告答案.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告答案.docx(70页珍藏版)》请在冰豆网上搜索。
数据结构实验报告答案
(此文档为word格式,下载后您可任意编辑修改!
)
《数据结构与算法分析》
课程设计内容体系主要内容
《数据结构课程设计》课程,可使学生深化理解书本知识,致力于用学过的理论知识和上机取得的实践经验,解决具体、复杂的实际问题,培养软件工作者所需的动手能力、独立解决问题的能力。
该课程设计侧重软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧、多人合作,以至一整套软件工作规范的训练和科学作风的培养。
一、课程设计要求
学生必须仔细阅读《数据结构与算法分析》课程设计方案,认真主动完成课程设计的要求。
有问题及时主动通过各种方式与教师联系沟通。
学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时的向教师汇报。
课程设计按照教学要求需要两周时间完成,两周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序30小时。
二、数据结构课程设计的具体内容
本次课程设计完成如下模块(共9个模块,学生可以在其中至少挑选6个功能块完成,但有**号的模块是必须要选择的)
(1)运动会分数统计**
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
功能要求:
●可以输入各个项目的前三名或前五名的成绩;
●能统计各学校总分;
●可以按学校编号、学校总分、男女团体总分排序输出;
●可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:
有中文提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
(2)订票系统
任务:
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
订票:
可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班;
退票:
可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
(3)文章编辑**
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求:
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
(4)存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
(4)约瑟夫环(Joseph)
任务:
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计一个程序来求出出列顺序。
要求:
利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:
m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
输入数据:
建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表。
输出形式:
建立一个输出函数,将正确的输出序列
(5)猴子选大王**
任务:
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
输入数据:
输入m,nm,n为整数,n 输出形式: 中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能 (6)建立二叉树,层序、先序遍历(用递归或非递归的方法都可以)** 任务: 要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数; (7)赫夫曼树的建立 任务: 建立建立最优二叉树函数 要求: 可以建立函数输入二叉树,并输出其赫夫曼树 在上交资料中请写明: 存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法; (8)纸牌游戏** 任务: 编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出: 这时正面向上的牌有哪些? (9)图的建立及输出 任务: 建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。 要求: 给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果 三、上交相关内容要求 上交的成果的内容必须由以下四个部分组成,缺一不可 1.上交源程序: 学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中); 2.上交程序的说明文件: (保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明; 3.课程设计报告: (保存在word文档中,文件名要求按照"姓名-学号-课程设计报告"起名,如文件名为"张三-001-课程设计报告".doc)按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成; 其中包括: ●需求分析: 在该部分中叙述,每个模块的功能要求 ●概要设计: 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。 ●详细设计: 各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。 要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 ●调试分析: 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些? 问题如何解决? ),算法的改进设想。 4.课设总结: (保存在word文档中)总结可以包括: 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容 《数据结构与算法分析》 ――课程内容体系主要内容 教学单元模块 具体教学内容 绪论 绪论部分是全书的预备知识,主要对ADL语言、数据结构与算法、算法分析基础、OOP、和C++做了简单介绍 基本数据结构 基本数据结构部分包括线性表、堆栈与队列、数组、字符串、整数集合类、树(包括AVL树、伸展树等)、图(包括网络流等问题的讨论)、散列(Hash)等 典型算法 典型算法部分主要介绍了若干典型算法的实现,并给出必要的复杂性分析和比较过程,具体包括递归、排序、查找和内存管理等 复杂数据结构 复杂数据结构部分主要包括优先级队列、不相交集合类和文件结构等 算法设计技巧 典型算法设计技巧的介绍,主要包括贪婪算法、分治算法、动态规划、回溯算法和随机化算法等 应用 应用部分是上述数据结构和典型算法的一些应用示例,具体包括事件驱动模拟、等价类、残缺棋盘和图象压缩等问题的讨论,在课时允许的情况下还会介绍摊还分析、红黑树等 《数据结构与算法分析》 课程实践内容体系主要内容 实践教学单元模块 实践教学基本要求 实践教学具体内容 趣味程序设计实践 1.熟悉编程环境 2.复习C语言程序设计的基本内容 1.开学第一、二周布置若干趣味程序设计题目,如奇数阶幻阵算法、万年历算法、迷宫算法等。 并完成: 2.随机产生n个整数,然后用一种排序算法将它们从小到大排序。 3.试编一程序,用贪心法求解一般的着色问题。 链表应用实验 1.熟悉链表结构 2.掌握链表结构上的各种操作 3.学会运用链表结构求解问题 1.试将本章介绍的两种Josephus问题的求解过程在计算机中实现,实现时要求输出的不是整数,而是实际的人名。 2.设A与B分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1和list2分别为指向两个链表的指针。 请写出并在计算机上实现将这两个链表合并为一个带头结点的有序循环链表的算法。 栈与队列应用实验 1.熟悉栈和队列结构 2.掌握栈和队列结构上的各种操作 3.学会运用栈和队列结构求解问题 1.设计实现一个求解n阶Hanoi塔问题的算法 提示: 将n个圆盘由A依次移到C,B作为辅助塔座。 当n=1时,可以直接完成。 否则,将塔座A顶上的n-1个圆盘移动到塔座B上,用塔座C作为辅助塔座;然后移第n个圆盘;最后将塔座B上的n-1个圆盘移到塔座C上,并用塔座A作为辅助塔座。 2.根据书中介绍的思想,设计并实现一个对简化表达式求值的系统。 3.在计算机上模拟实现农夫过河问题的解。 文本文件检索实验 1.熟悉字符串的操作 2.学会运用字符串的操作进行文本检索和查询。 1.根据课堂介绍设计实现KMP算法 2.试设计一个简单的文本编辑器,使之具有对字符串的输入、输出、插入、删除、查找和替换等功能 3.设计实现一个通用的判定回文个数问题的算法程序 稀疏矩阵和广义表实验 1.熟悉稀疏矩阵和广义表结构 2.掌握稀疏矩阵和广义表结构上的各种操作 3.学会运用稀疏矩阵和广义表结构求解问题 1.设计实现两个普通矩阵相乘的算法 2.实现用三元组表示法实现稀疏矩阵相加及转置算法 3.设计实现两个N次一元多项式相加的算法程序 树结构实验 1.熟悉树和二叉树结构 2.掌握树和二叉树结构上的各种操作 3.学会运用树和二叉树结构求解问题 1.设计一个程序,根据二叉树的先根序列和对称序序列创建一棵用左右指针表示的二叉树 2.根据哈夫曼算法创建哈夫曼树,并求树中每个外部结点的编码 3.设计一个程序,把中缀表达式转换成一棵二叉树,然后通过后序遍历计算表达式的值 4.设计实现一个完成对BST树进行插入、删除、查找操作的算法,并希望有部分同学能进一步把该算法改写为针对AVL树的相关算法 图结构实验 1.熟悉图结构 2.掌握图结构上的各种操作 3.学会运用图结构求解问题 采用两种不同的图的表示方法,实现拓扑排序和关键路径的求解过程。 使用实现的算法对于下图所示的AOE网,求出各活动的可能的最早开始时间和最晚开始时间。 输出整个工程的最短完成时间是多少? 哪些活动是关键活动? 说明哪项活动提高速度后能导致整个工程提前完成? 分析不同存储结构对于算法效率的影响。 散列表实验 1.熟悉散列表结构 2.掌握散列函数的生成方法,掌握常规冲突处理办法 3.学会运用散列结构求解问题 试根据全年级学生的姓名,构造一个散列表,选择适当的散列函数和解决碰撞方法,设计并实现插入、删除和查找算法,统计碰撞发生的次数。 (用拉链法解决碰撞时负载因子取2,用开地址法时取1/2) 航班信息查询与检索实验设计 1.掌握查找与排序的各种算法 2.学会选用和设计实际问题所需的查找与排序算法 对于直接插入排序、直接选择排序、起泡排序、Shell排序、快速排序和堆排序等六种算法进行上机实习。 要求: 1.被排序的对象由计算机随机生成,长度分别取20,100,500三种。 2.算法中增加比较次数和移动次数的统计功能。 3.对实习的结果做比较分析。 4.设计实现一个航班信息查询与检索系统 课程实验参考教材: ●魏开平等编著.数据结构辅导与实验.清华大学出版社,2006年第1版 ●瞿有甜,《数据结构与算法分析》实验指导书,2004.9 实验1猴子选大王 任务: 一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 输入数据: 输入m,nm,n为整数,n 输出形式: 中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。 实验内容: 源程序: #include #include typedefstructnode{ intdata; structnode*next; }ListNode; typedefListNode*LinkList; /*建立单循环链表函数*/ LinkListInitRing(intn,LinkListR) { ListNode*p,*q; inti; R=q=(ListNode*)malloc(sizeof(ListNode)); for(i=1;i p=(ListNode*)malloc(sizeof(ListNode)); q->data=i; q->next=p;q=p; } p->data=n; p->next=R; R=p; returnR; } /*选择函数*/ LinkListDeleteDeath(intn,intk,LinkListR) { inti,j; ListNode*p,*q; p=R; for(i=1;i<=n/2;i++) { for(j=1;j<=k-1;j++) p=p->next; q=p->next; p->next=q->next; printf("%4d",q->data); if(i%10==0)printf("\n"); free(q); } R=p; returnR; } /*输出函数*/ voidOutRing(intn,LinkListR) { inti; ListNode*p; p=R; for(i=1;i<=n/2;i++,p=p->next) { printf("%4d",p->data); if(i%10==0)printf("\n"); } printf("\n"); printf("猴大王的号码: \n"); printf("4%d",p->next); } /*主函数*/ voidmain() { LinkListR; intn,k; LinkListInitRing(intn,LinkListR); printf("猴子的总数N: "); scanf("%d",&n); printf("报到要被淘汰数字K: "); scanf("%d",&k); printf("被淘汰的猴子: \n"); R=InitRing(n,R); R=DeleteDeath(n,k,R); printf("\n"); OutRing(n,R); } 实验结果: 实验2订票系统 任务: 通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定) 查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况; 订票: 可以订票(订票情况可以存在一个数据文件中,结构自己设定),如果该航班已经无票,可以提供相关可选择航班; 退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 修改航班信息: 当航班信息改变可以修改航班数据文件 要求: 根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能; 实验内容: 源程序: #include #include #include #include #include #include #include #defineTRUE1 #defineFALSE0 typedefintBOOL; #defineNEW(type,size)(type*)malloc(sizeof(type)*size) typedefstruct_date{/*日期*/ intm_year; intm_month; intm_day; }DATE; typedefstruct_time{/*时间*/ intm_hour; intm_min; }TIME; typedefstruct_flight{/*航班数据*/ intm_fltno;/*航班号,若此成员为-1,则表示此航班未使用*/ charm_szFrom[30];/*起飞港*/ charm_szPass[30];/*途经港*/ charm_szTo[30];/*到达港*/ TIMEm_start;/*起飞时间*/ TIMEm_arrive;/*到达时间*/ TIMEm_fly;/*飞行固定时间*/ intm_people;/*乘客限额*/ }FLIGHT,*PFLIGHT; typedefstruct_passengernode{/*乘客数据*/ charm_szName[20];/*姓名*/ charm_szCorp[30];/*单位*/ charm_szNumber[19];/*身份证号,考虑到字母的情况,故使用字符串*/ DATEm_Date;/*订票日期*/ intm_fltno;/*航班号*/ intm_seatno;/*座位号*/ }PASSENGER,*PPASSENGER; typedefstruct_psgnode{/*乘客结点*/ PASSENGERm_psg; struct_psgnode*next; }NODE,*PNODE; /*清空键盘缓冲区*/ voidClearBuffer(void); /*读取航班数据*/ voidReadFlight(FLIGHTfltlist[]); /*读取乘客数据*/ voidReadPassenger(PNODEpsglist); /*添加航班*/ BOOLAddFlight(FLIGHTfltlist[],PFLIGHTfltdata); /*删除航班*/ voidDelFlight(FLIGHTfltlist[],intindex); /*添加乘客*/ voidAddPassenger(PNODEpsglist,PPASSENGERpsgdata); /*删除乘客*/ BOOLDelPassenger(PNODEpsglist,intindex); /*清空乘客链表*/ voidClearPsgList(PNODEpsglist); /*取得乘客总数*/ unsignedintGetPsgCount(PNODEpsglist); BOOLdatecmp(DATE*date1,DATE*date2); voidBook(FLIGHTfltlist[],PNODEpsglist); voidquery(FLIGHTfltlist[],PNODEpsglist); voidfltnumber(FLIGHTfltlist[]); voidpsgname(PNODEpsglist); voidfromto(FLIGHTfltlist[]); voidfltdat(FLIGHTfltlist[],PNODEpsglist); /*保存航班数据*/ voidSaveFlight(FLIGHTfltlist[]); /*保存乘客数据*/ voidSavePassenger(PNODEpsglist); /*退出*/ voidQuit(FLIGHTfltlist[],PNODEpsglist); BOOLdatecmp(DATE*date1,DATE*date2) { return(date1->m_year==date2->m_year&&date1->m_month==date2->m_month &&date1->m_day==date2->m_day); } BOOLtimecmp(TIME*time1,TIME*time2) { return(time1->m_hour==time2->m_hour&&time1->m_min==time2->m_min); } voidClearBuffer(void) { getchar(); } voidReadFlight(FLIGHTfltlist[]) { FILE*fp; if((fp=fopen("flight.dat","rb"))! =NULL) fread(fltlist,sizeof(FLIGHT),40,fp); els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)