数据结构课程设计方案_第1页
数据结构课程设计方案_第2页
数据结构课程设计方案_第3页
数据结构课程设计方案_第4页
数据结构课程设计方案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计方案一、课程设计的目的数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:n 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;n 初步掌握软件开

2、发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;n 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;n 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。二、课程设计的基本要求1、独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。2、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。3、按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;其中包括:1) 需求分析:在该部分中叙述,每个模块的功能要求;2)

3、 概要设计:在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。3) 详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。4) 调试分析:测试数据,测试输出的结果,时间复杂度分析和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。5) 课程设计总结:(保存在word文档中)总结可以包括课程设计过程的收获、遇到问题、遇到问题解决问

4、题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对数据结构课程的认识等内容;4、每组实现的结果必须进行检查和演示;程序源代码和程序的说明文件必须上交,作为考核内容的一部分;(上交时每人交一份,文件夹的取名规则为:“学号 姓名”,如“200413498 高魁”。该文件夹下至少包括:“源代码”、“课程设计报告”、“可执行文件”。由学习委员收集刻盘按规定时间统一上交)。5、课程设计报告需要附源代码,可以对重点函数及结构进行说明。6、报告提交:时间:第1周星期五下午4点开始检查,第2周星期一下午4点之前由学习委员收集上交,迟交无成绩。形式:课程设计报告(要求打印)和电子文档

5、(统一刻盘)。 7、所有的题目限一人完成。三、课程设计题目1.运动会分数统计任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)功能要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5)数据存入文件并能随时

6、查询;6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称;输出形式:有合理的提示,各学校分数为整形;界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用a、全部合法数据;b、整体非法数据;c、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;2.飞机订票系统任务:通过此系统可以实现如下功能:录入:可以录

7、入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;3.文章编辑功能:输入一页文字,程序可以统计出文字

8、、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共n行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章;4.宿舍管理查询软件任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:a.采用交互工作方式b.建立数据

9、文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)查询菜单: (用二分查找实现以下操作)a.按姓名查询 b.按学号查询 c.按房号查询打印任一查询结果(可以连续操作)5.校园导航问题设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。6.教学计划编制问题 设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。7.散列法的实验研究散列法中,散列函数构造方法多种多样,同时对于同一散列

10、函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。8.图书借阅管理系统 主要分为两大功能:图书管理(增加图书、查询图书、删除图书、图书借阅、还书);会员管理(增加会员、查询会员、删除会员、借书信息);9.学生成绩管理 实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。10.活期储蓄帐目管理 活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:1)能比较迅速地找到储户的帐户,以实现存款、取款记账;2)能比较简单,迅速地实现插入和删除,以实现开

11、户和销户的需要。11.二叉排序树的实现 用顺序和二叉链表作存储结构 1)以回车(n)为输入结束标志,输入数列l,生成一棵二叉排序树t;2)对二叉排序树t作中序遍历,输出结果;3)输入元素x,查找二叉排序树t,若存在含x的结点,则删除该结点并作中序遍历(执行操作2);否则输出信息“无x”;12.最小生成树问题设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。13.通讯录的制作设计目的:用数据结构中的双向链表作数据结构,结合c语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几方面的功能

12、:1)输入信息enter();2)显示信息display( );3)查找以姓名作为关键字 search( );4)删除信息delete( );5)存盘save ( );6)装入load( ) ;设计要求:1)每条信息至包含 :姓名(name )街道(street)城市(city)邮编(eip)国家(state)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力3)上机能正常运行,并写出课程设计报告14.哈夫曼编码/译码器【问题描述】:设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。【基本要求】1)将权值数据存放在数据文件(文件名为data.txt,

13、位于执行程序的当前目录中) 2)分别采用动态和静态存储结构3)初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;4)编码:利用建好的哈夫曼树生成哈夫曼编码;5)输出编码;6)设字符集及频度如下表:字符 空格 a b c d e f g h i j k l m频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20字符 n o p q r s t u v w x y z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 【进一步完成内容】1)译码功能;2)显示哈夫曼树;3)界面设计的优化。15.图书管理系统【问题描述】:设计

14、一个计算机管理系统完成图书管理基本业务。【基本要求】1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;归还:注销对借阅者的登记,改变该书的现存量。【进一步完成内容】1)系统功能的进一步完善;2)索引表采用树表。16.散列表的设计与实现【问题描述】:设计散列表实现电话号码查找系统。【基本要求】1)设每个记录有下列数据项:电话号码、用户名、地址;2)从

15、键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;3)采用一定的方法解决冲突;4)查找并显示给定电话号码的记录;5)查找并显示给定用户名的记录。【进一步完成内容】1)系统功能的完善;2)设计不同的散列函数,比较冲突率;3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。17.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。 设有一元多项式am(x)和bn(x). am(x)=a0+a1x1+a2x2+a3x3+ +amxm bn(x)=b0+b1x1+b2x2+b3x3+ +bnxn请实现求m(x)= am(x)+bn(x)、m(x)= a

16、m(x)-bn(x)和m(x)= am(x)bn(x)。要求: 1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果m(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况 18.利用栈求表达式的值,可供小学生作业,并能给出分数。要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。19.简易文本编辑器要求:1)具有图形菜单界面;2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3)可正确存盘、取盘;4)正确显示总行数。20.二叉

17、树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。要求:遍历的内容应是千姿百态的。树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。21.学生搭配问题 一班有m个女生,有n个男生(m不等于n),现要开一个舞会,男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴。 请设计一系统模拟动态地显示出上述过程,要求如下:1)输出每曲配对情况;2)计算出任何一个男生(编号为x)和任意女生(编号为y),在第k曲配对跳舞的情况.至少求

18、出k的两个值;3)尽量设计出多种算法及程序,可视情况适当加分。 提示:用队列来解决比较方便。22.猴子吃桃子问题 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解2)采用链数据结构实现上述求解3)采用递归实现上述求解23.数制转换问题 任意给定一个m进制的数x ,请实现如下要求:1)求出此数x的10进制值(用md表示)2)实现对x向任意的一个非m进制的数的转换。3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。24.排序综合 利用随

19、机函数产生n个随机整数(20000以上),对这些数进行多种方法进行排序。要求:1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。3)如果采用4种或4种以上的方法者,可适当加分。25.学生成绩管理系统现有学生成绩信息文件1(1.txt),内容如下姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 7

20、7陈东明 05 67 38 47. . . . 学生成绩信息文件2(2.txt),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77. . . . 试编写一管理系统,要求如下:1)实现对两个文件数据进行合并,生成新文件3.txt2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)要求使用结构

21、体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.26.图的遍历的实现要求:1)先任意创建一个图;2)图的dfs,bfs的递归和非递归算法的实现3)要求用有向图和无向图分别实现4)要求用邻接矩阵、邻接表多种结构存储实现27.线索二叉树的应用要求:实现线索树建立、插入、删除、恢复线索的实现。28.稀疏矩阵应用要求:实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。(1)稀疏矩阵的存储(2)稀疏矩阵加法(3)矩阵乘法(4)矩阵转置29.树的应用要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。30. 文本文件单

22、词的检索与计数设计要求与分析:要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现:其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。(1)建立文本文件(2)给定单词的计数(3)检索单词出现在文本文件中的行号、次数及其位置(4)主控菜单程序的结构 头文件包含

23、菜单选项包含 建立文件、单词定位、单词计数、退出程序 选择1-4执行相应的操作,其他字符为非法。 31.任意长的整数加法问题描述:设计一个程序实现两个任意长的整数的求和运算。基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。32. 停车场管理问题设计目的 掌握栈的定义、特点和存储结构以及相应的操作 掌握队列的定义、特点和存储结构以及相应的操作设计内容和要求 利用栈的顺序存储和队列的链式存储来模拟停车场管理。要求:设有一个可以停放n辆车的狭长停车场,只有一个大门可以供车辆进出,车辆

24、按到达时间的先后次序从里向外停放,若停车场已放满,则后来的车辆只能停放在车场大门外的便道上,每辆车在离开停车场时,根据它在停车场内停留时间的长短交费,但在便道上的车辆离去,不收车费。33.串的查找和替换 问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。34.约瑟夫环 问题描述:编号为1,2 n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下

25、去,直至所有人全部出列为止,设计一个程序求出出列顺序。 基本要求:利用单循环链表作为存储结构模拟此过程;键盘输入总人数、初始报数上限值m及各人密码;按照出列顺序输出各人的编号。 35.构造可以使n个城市连接的最小生成树 问题描述:给定一个地区的n个城市间的距离网,用prim算法或kruskal算法建立最小生成树,并计算得到的最小生成树的代价。基本要求:a、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。b、表示城市

26、间距离网的邻接矩阵(要求至少6个城市,10条边)c、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。 36.客户消费积分管理系统问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。基本要求:l 采用一定的存储结构进行客户信息的存储;l 对客户的信息可以进行修改、删除、添加;l 能够根据消费情况进行客户积分的计算;l 根据积分情况实行不同程度的打折优惠;37.产品进销存管理系统问题描述:针对某一种行业的库房的产品进销存情况进行管理。基本要求:l 采用一定的存储结构对库房的货品及其数量进行分类管理;l 可以进行产品类的添加、产品的添加、产品数量的

27、添加;l 能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;38. 特殊矩阵的压缩存储算法的实现问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。基本要求:l 针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;l 输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;39.算术表达式的求解问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:l 从键盘输入要求解的算术表达式;l 采用栈结构进行算术表达式的求解过程;l 能够判断算术表达式正确与否;l 对于错误表达式给出提示;l 对于正确的表达式给出最后的结果;40. 轮船渡口管理问题【问题描述】有一个渡

28、口,每条渡轮一次能装载10辆汽车过江,过江车辆分为客车和货车两类,上渡轮有如下规定:同类汽车先到先上船;客车先于货车上船;每上4辆客车才允许上一辆货车,但若等待的客车不足4辆则用货车填补,反过来,若没有货车等待则用客车填补;装满10辆后则自动开船,当等待时间较长时车辆不足10辆也应人为控制发船。【实现提示】此题应建立和使用两个链式队列,一个为客车队列,另一个为货车队列,到渡口需过江的汽车分别进入到相应队列中。当渡口有渡轮时先让客车队列中的4部客车出队并开进渡轮,再让货车队列中的4部货车出队并开进渡轮,若某一类车辆队列为空则从另一队列中补充。当渡轮上装满10辆后则自动开船,此时应输出已装每辆车的

29、车号。若装载不足10辆,但两个车辆队列全为空,应继续等待一段时间,若等待时间较长,仍不满载则应人为控制开船。41. 车厢调度 问题描述:假设停在铁路调度站入口处的车厢序列的编号一次为1,2,3,4。设计一个程序,求出所有可能由此输出的长度为4的车厢序列。42.迷宫问题(栈)问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。基本要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示

30、走到下一坐标的方向,如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(3,2,3),(3,1,2),。测试数据:迷宫的测试数据如下:左下角(1,1)为入口,右下角(8,9)为出口。实现提示:计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约

31、定有东、南、西、北四个方向可通。选做内容:(1)编写递归形式的算法,求得迷宫中所有可能的通路;(2)以方阵形式输出迷宫及其通路。43.迷宫问题(队列)(同上)44二叉搜索树:各种搜索树效率比较题目要求:本题目要求对普通的二叉排序树、avl树分别实现制定操作,并分析比较这两种不同数据结构对应的一系列插入和删除操作的效率。要求测试对n个不同整数进行下列操作的效率:按递增顺序插入n个整数,并按同样顺序删除;按递增顺序插入n个整数,并按相反顺序删除;按随机顺序插入n个整数,并按随机顺序删除;要求n从1000到10000取值,并以数据规模n为横轴,运行时间为纵轴,画出3种不同数据结构对应的操作效率比较图

32、。45. 病毒测试程序本题的任务是:当整个网络被感染后,计算有多少台机器被某个特定变种所感染。输入要求:输入由若干组测试数据组成。每组数据的第1行包含2个整数m和n(1m,n500),接下来是一个m*n的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。下面一行给出一个正整数q,是将要查询的变种的个数。接下去的q行里,每行给出一个变种的类型。当m或n为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试,在一行里输出被某个特定变种所感染的机器数量。46关键路径问题 问题描述:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。基本要求:(

33、1)对一个描述工程的aoe网,应判断其是否能够顺利进行。(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。47.神秘国度的爱情故事输入要求:输入由若干组测试数据组成。每组数据的第1行包含一正整数n(1n50000),代表神秘国度中小村的个数,每个小村即从0到n-1编号。接下来有n-1行输入,每行包含一条双向道路的两端小村的编号,中间用空格分开。之后一行包含一正整数m(1m500000),代表着该组测试问题的个数。接下来m行,每行给出a,b,c三个小村 的编号,中间用空格分开。当n为0时,表示全部测试结束,不要对该数据做任

34、何处理。输出要求:对每一组测试给定的a,b,c,在一行里输出答案,即:如果c在a和b之间的路径上,输出yes,否则输出no。48.并查集:检查网络题目要求:给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。请写出程序判断:任意指定两台计算机,它们之间是否可以进行文件传输?输入要求:输入若干测试数据组成。对于每一组测试,第1行包含一个整数n(10000),即网络中计算机的总台数,因而每台计算机可用1到n之间的一个正整数表示。接下来的几行输入格式为i c1 c2或者 c或者c c1c2或者s,其中c1

35、和c2是两台计算机的序号,i表示在c1和c2间输入一条连线,c表示检查c1和c2间是否可以传输文件,s表示该组测试结束。当n为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组c开头的测试,检查c1和c2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。当读到s时,检查整个网络。若网络中任意两机器间都可以传输文件,则在一行中输出“the network is connected.”,否则输出“there are k components.”,其中k是网络中连通集的个数。两组测试数据之间请输出一空行分隔。49.网络流:宇宙旅行题目要求:在走遍了地球上的所有景

36、点以后,旅游狂人开始计划他的宇宙旅行项目。经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数列表。但旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。输入要求:输入若干组测试数据组成。每组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数n(n为0标志全部测试结束,不要对该数据做任何处理)。接下来的n行里,数据格式

37、为:sourcei capacityi ,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。每个名称是由az之间三个大写字母组成的字符串,例如:zju。测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。输出要求:对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都可以保证让全部旅客下船。50 停车场管理问题【问题描述】:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次

38、从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制程序模拟该停车场的管理。【实现要求】: 要求程序针对每组输入数据进行处理后的输出信息为:每辆车到达后的停车位置(停

39、车场或便道上),以及某辆车离开停车场时它在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。汽车的每一组模拟输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。例如,(a,1,5)表示1号牌照车在5这个时刻到达,而(d,5,20)表示5号牌照车在20这个时刻离去。整个程序在输入信息为(e,0,0)时结束。其中:a表示到达(arrival); d表示离去(departure); e表示输入结束(end)。 【实现提示】:本题可用以顺序栈模拟停车场,以链式队列模拟该停车场大门外的便道。需另设一个顺序栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车

40、。输入的数据按到达或离去的时刻有序。栈中的每个元素表示一辆汽车,包括两个数据项:汽车的牌照号码和进入停车场的时刻。 【测试数据】:设n=2,输入数据为:(a,1,5), (a,1,20), (d,1,15), (a,3,20), (a,4,25), (a,5,30), (d,2,35), (d,4,40), (e,0,0)。四、课程设计报告的规范课程设计报告要求规范书写。应当包括如下六个部分:1、设计目的与内容。进行需求分析,确定每个模块的功能要求。即根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)2、算法的基本思想进行概要设计和详细设计。说明用到的数据结构定义

41、、主程序的流程及各程序模块之间的调用关系。并用自然语言描述每个模块所涉及的算法。3、测试数据列出对于给定的输入所产生的输出结果。4、源程序及系统文件使用说明附上关键数据结构的定义及关键算法的源代码。5、心得体会谈谈课程设计过程的收获、遇到问题及解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对数据结构课程的认识等内容。6、参考文献参考文献要注明作者、出版社、出版日期。五、课程设计考核方法及成绩评定课程设计成绩分两部分,设计报告占40,设计作品占60。六、课程设计报告的内容设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料.设计报告以规定专

42、用课程设计报告书来写,版面整洁,图,表要清楚,工整。正文包括以下12个内容:1设计目的2设计内容与要求3课题分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么,需要什么结果、所能达到的功能.4算法思想:阐述要达到课题分析功能准备采用的算法思路。例如:本程序是扫描一个c源程序,有hash表存储程序中出现的关键字,并统计该程序中的关键字出现的频度。用线性探测法解决hash冲突。设hash函数为:hash(key)=(key的第一个字母序号)*100+(key的最后一个字母序号) mod 41。算法思想如下:建立一个结构体数组的hash表,存放读入的关键字和其出现的次数。先初始化并建立该h

43、ash表,先初始化为”0”,0,再从文件中一个个读入所有关键字,存放在hash表中相应位置。从另一文件中一行行读入,找出其中非注释中的,也非“”中的,长度2-8个字符的小写字符串,用hash查找,看该单词是否关键字,如是其出现次数加一,若不是就继续下一个这样的字符串,直至文件尾。在找这样的字符串途中,遇到无法匹配的单或双引号打印出出现在第几行。hash表建立好后打印出来。其中核心算法分为两块:1.hash表的建立和hash查找。2.寻找上述的字符串。1.建立hash表的算法:该函数实参为已建立的hash表和在c源程序中找到的一个小写字母字符串。 从该字符串key为下标处依次开始查找,到数组末尾

44、是返回数组头(key=(key+1)%44;),分两种情况:若先找到空位,说明该字符串不是关键字。则不改变hash表。若先找到了该关键字的纪录,则该字符串是关键字,+hashkey.num;2.寻找疑似关键字字符串的算法 功能:依次找出被非标识符且非”、/、/*、*/隔开的,长度为2-8个字符,非注释中的,也非“”中的小写字母字符串,因为它可能是关键字。首先,一行行读入c源程序,用续行符相连的几行当一行一起读入。(1)、case 0和case 1:双引号中的不算,跳过。 “”匹配中,“”不算,“”算。 单引号中的双引号不算,而且单引号中不会有关键字,所以单引号中的也跳过。 匹配中,不算,算(2

45、)、case 2:注释中的不算,跳过。分为/*/ /设一个标志符flag,当找到/* 但在该行没找到*/ 时,flag=1;此时在下行中寻找*/ ,以此类推,直至找到*/ 后flag=0,以后字符恢复有效。当找到/时放弃该行之后的所有字符,读入下一行(3)、case 3:读到大写字母、下划线或数字时,肯定该字符串不是关键字,则清除已存在s中的字符串,并跳过紧接在后面的允许在标识符中出现的字符。(4)、case 4:读到的是小写字母,则存放到字符串s中。(5)、case 5:本算法以除“、/、/*、*/之外的不能在标识符中出现的字符隔开整行字符串,并判断被隔开的长度2-8个字符,不含大写字母、下

46、划线、数字的字符串(即小写字母字符串)是否关键字,是则增加其统计个数(判断方法为hash查找)。5概要设计: 说明本程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次(调用)关系.包括数据结构定义、程序结构、界面设计。例如:(1)数据结构定义struct edgenodeint adjvex; /该弧所指向的顶点的位置 edgenode * next; /指向下条条弧的指针; /定义邻接表的边结点类型typedef edgenode * * adjlist; /定义邻接表类型(2)程序结构main()create_hash()chu_shi_hash()guan_jian

47、_zi()print()equal()copy()panduan()change_hash()equal()如图,main()函数调用了四个子函数, chu_shi_hash()、create_hash()、guan_jian_zi()、print()。其中,chu_shi_hash()把hash表初始化为“0000” 0,标记空位,便于以后操作。ccreate_hash()实现hash表的创建,从放关键字的文件一个个关键字,它调用了两个子函数,equal()判断两数组是否相等,用来确定某处是否空位.copy()把一个数组赋给另一数组,在确定插入位置插入该关键字。guan_jian_zi()从

48、c源程序中依次找到可能是关键字的字符串,然后用hash查找判断它是否关键字,是则增加其统计次数。它调用了两个子函数:panduan(char) 和chang_hash(hash,const char ch),前者用来判断一个字符的的类别,后者在hash表中查找判断ch是否关键字,是则增加其在hash表中的统计量。 而chang_hash()调用了函数equal(),用来确定某处是否空位或ch。print(hash)用来打印hash表。(3)界面设计(略)6详细设计:进一步细化概要设计中定义的各模块或函数功能,画出算法实现流程图.7测试数据定义:定义典型的测试输入数据,包括各种体现课设正常功能的

49、数据,也包括各种异常测试数据。测试数据应与课题分析所要求的目标一致。8源码:打印9测试结果:打印例如:10算法分析:算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;12.使用说明:13总结与体会:要写出自己的真实感受。例如一:转眼,为期两周的数据结构课程设计实习即将结束了。在这次实习中,自己的c语言知识和数据结构知识得到了巩固,编程能力也有了一定的提高。同时也学会了解决问题的方法。总结起来,自己主要有以下几点体会:1.必须牢固掌握基础知识。由于c语言是大一所学知识,有所遗忘,且未掌握好这学期所学的数据结构这门课,所以在实习之初感到棘手。不知如何下手,但在后来的

50、实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对c语言和数据结构知识有所熟悉。这时才逐渐有了思路。所以,这次实习之后,我告诫自己:今后一定要牢固掌握好专业基础知识。2.必须培养严谨的科学态度。自己在编程时经常因为一些类似于“少了分号”的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。编程是一件十分严谨的事情,容不得马虎。所以在今后自己一定要培养严谨的科学态度。我想这不仅是对于程序设计,做任何事都应如此。3.这次课程设计也让我充分认识到数据结构这门课的重要性。它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。同时它也有广泛的实际应用。总之,在这次实习中,自己的

51、c语言以及数据结构知识得到提高,编程能力也得到了提高。例如二:经过一学期的数据结构课程的学习,我现在编程已经比以前模块化多了,这样既不容易出错,而且出了错也较容易查出,其可读性也加强了。其次,我现在已习惯编程时写注释了,好像它成了我程序不可缺少的一部分似的,这不仅提高了程序的可读性,因为我是直接上机编的,这也让我的思维更清晰,逻辑更分析的更快些。对于这次课程设计编的程序,关于hash表的建立和查找,老师上课是讲过的,这一点上没遇到困难,而在于建立和查找的具体环节,会遇到哪几种情况,这些分析上,开始我并没有想周全,漏洞是在调试的时候发现改正的。这说明我想的还是不够细的,要是程序很大是,出现这种逻

52、辑问题就很难发现了。最重要的是,我开始没能很好的理解题意,最先的程序是为了建hash表而建的,这种思维是不对的,经过吉老师的点播后,恍然大悟,这个思想上的突破很有帮助。还有开始编的程序是以空格分开单词,这样局限性就很大,经过思考和改良,编了这个和编译器识别关键字同样效果的程序,它以标识符允许之外的字符隔开单词,其实际应用性就很好了。程序的实用性是很重要的,这就是我的收获。另外,由于编程的积累,我发现调试程序的速度明显加快了,这是个很好的进步,不过,我编程的速度仍然有待提高,我思考过了,导致慢的原因可能有以下几点:1、打字速度慢。(这点的确的克服)2、算法没有很熟,只是想一想能出来,而远没有应到

53、的境界。3、对于数组之类的边界问题浪费了一定的时间,看来用笔画一下比空想是明智些的。4、编程时精神不能太集中,不过这点一比以前好多了。5、这是最后,也是最重要的一点,编的程序还不够多,所谓熟能生巧嘛。综上所述,我还是要好好努力,继续历练的,以提高编程能力目标而继续热情的奋斗!14参考文献:列出参考的相关资料和书籍.例如:杨路明 c语言程序设计教程 北京邮电大学出版社徐孝凯 数据结构课程实验 清华大学出版社严蔚敏 吴伟民 数据结构(c语言版) 清华大学出版社数据结构课程设计报告题目事件排列表班 级: 学 号: 姓 名: 时 间: 2006/11/17-2006/12/20 一、设计目的与内容1设计目的熟练掌握队列的顺序存储表示和基本操作的实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论