东北大学信息科学与工程学院
数据结构课程设计报告
题目:男女运动员最佳组合
课题组长王逸飞
课题组成员王嘉琦李聪
*名称计算机科学与技术
班级计1307
指导教师:杨雷
2015年1月
课程设计任务书
目录
1课题概述.......................................................1
1.1课题任务...................................................1
1.2课题原理...................................................1
1.3相关知识...................................................32方案设计.......................................................7
2.1总体功能设计..............................................7
2.2数据结构设计..............................................8
2.3函数原型设计.............................................10
2.4主算法设计................................................12
2.5用户界面设计.............................................143方案实现......................................................15
3.1开发环境与工具...........................................15
3.2程序设计关键技术.........................................16
3.3个人设计实现(按组员分工)
3.3.1王逸飞设计实现.....................................17
3.3.2王嘉琦设计实现.....................................17
3.3.3李聪设计实现.......................................174测试与调试...................................................23
4.1个人测试(按组员分工)..................................23
4.1.1王逸飞测试.........................................23
4.1.2王嘉琦测试.........................................23
4.1.2李聪测试............................................23
4.2组装与系统测试............................................33
4.3系统运行..................................................365课题总结.....................................................39
5.1课题评价..................................................39
5.2团队协作...................................................40
5.3团队协作...................................................41
5.4个人设计小结(按组员分工)..............................42
5.4.1王逸飞设计小结.....................................42
5.4.2王嘉琦设计小结.....................................42
5.4.3李聪设计小结.......................................426附录a课题任务分工........................................50
a-1课题程序设计分工....................................50a-2课题报告分工.........................................51附录b课题设计文档(光盘)............................52
b-1课程设计报告(电子版)..............................52b-2源程序代码(*.h,*.cpp)...........................52b-3工程与可执行文件.....................................52b-4屏幕演示录像文件(可选)...........................52附录c用户*作手册(可选)............................53
c.1运行环境说明.........................................53
c.2*作说明.............................................54
1课题概述
1.1课题任务
【问题描述】
设有n个男羽毛球运动员和n个女羽毛球运动员,现组成n对男女混合最佳组合。每个男运动员对每个女运动员都有一个满意度排序,用矩阵mf[0:n-1][0:n-1]表示。mf[i][j]表示第i个男运动员对第j个女运动员的满意度,满意度值越高,满意程度越高。同理,每个女运动员对每个男运动员也有一个满意度排序,用矩阵fm[0:n-1][0:n-1]表示。男女运动员之间的一个完全匹配称为一个组合。
【设计要求】
设计对于给定的满意度,求最佳组合的程序,使得满意度总和达到最大。
(1)采用stl的向量等数据结构。
(2)实现stl的一维向量类vector。
(3)利用一维向量类构造二维向量矩阵。
(4)尝试采用不同数据结构的多种解法。
1.2课题原理
采用stl的向量等数据结构,利用一维向量类构造二维向量矩阵,使用递归函数进行比较,以及一些基本*作。
1.3相关知识
vector的定义,表示,c语言实现,函数的递归调用。
2方案设计
2.1总体功能设计
(1)实现输入
(2)实现后台运算和匹配
(3)实现输出结果
3.2数据结构设计
男,女,匹配结果,运算的vector:
vector>mf(n);
1课题概述
1.1课题任务
【问题描述】
设有n个男羽毛球运动员和n个女羽毛球运动员,现组成n对男女混合最佳组合。每个男运动员对每个女运动员都有一个满意度排序,用矩阵mf[0:n-1][0:n-1]表示。mf[i][j]表示第i个男运动员对第j个女运动员的满意度,满意度值越高,满意程度越高。同理,每个女运动员对每个男运动员也有一个满意度排序,用矩阵fm[0:n-1][0:n-1]表示。男女运动员之间的一个完全匹配称为一个组合。
【设计要求】
设计对于给定的满意度,求最佳组合的程序,使得满意度总和达到最大。
(1)采用stl的向量等数据结构。
(2)实现stl的一维向量类vector。
(3)利用一维向量类构造二维向量矩阵。
(4)尝试采用不同数据结构的多种解法。
1.2课题原理
采用stl的向量等数据结构,利用一维向量类构造二维向量矩阵,使用递归函数进行比较,以及一些基本*作。
1.3相关知识
vector的定义,表示,c语言实现,函数的递归调用。
2方案设计
2.1总体功能设计
(1)实现输入
(2)实现后台运算和匹配
(3)实现输出结果
3.2数据结构设计
男,女,匹配结果,运算的vector:
vector>mf(n);
vector>fm(n);
vector
vector
2.3函数原型设计
voidinput()//输入男女满意度数据
intrecmaxadv(inti)//递归调用求解
intrun()//调用之前的函数,运行
intmain()主函数
2.4主算法设计
2.5用户界面设计
由于时间原因,低级版本在没有实现可视化界面,采用dos来显示得到的结果。
3方案实现
3.1开发环境与工具
编程环境为visualc++6.0,vim。工具为c语言。
3.2程序设计关键技术
stl的向量等数据结构。
3.3个人设计实现(按组员分小节)
3.3.1王逸飞、王嘉琦、李聪设计实现
1.课题任务
(1)建立vector:男,女,匹配结果,运算需要
(2)函数:按长度输入数据
(3)函数:递归调用求解,比较
(4)函数:循环调用(2)函数,输入,调用(3)比较,输出
(5)主函数:调用(4),输出结果
2.程序源代码
#include
usingnamespacestd;
#include
#definen3
vector>mf(n);
vector>fm(n);
vector
voidinput()//输入男女满意度数据
{
//依次输入男队员对女队员的满意度
vector>::iteratoriiter;
vector::iteratoriter;
cout
();++iiter)
{
(*iiter).resize(n);
for(iter=iiter->begin();iter!=iiter->end();++iter){
cin>>*iter;
}
}
//依次输入女队员对男队员的满意度
cout
(*iiter).resize(n);
for(iter=iiter->begin();iter!=iiter->end();++iter){
cin>>*iter;
}
}
}
int*s;//s[i]男i的配合者
intmaxa;//当前最大总和
intsuma;//当前总和
intrecmaxadv(inti)//递归调用求解{
if(i>=n)//组合完毕
{
if(maxa for(intk=0;k return0; } for(intj=i;j { swap(s[i],s[j]); suma+=mf[i][s[i]]+fm[s[i]][i]; // //cout b[i]=s[i]; //cout recmaxadv(i+1); suma-=mf[i][s[i]]+fm[s[i]][i]; swap(s[i],s[j]); } return0; } intrun()//run函数定义 { s=newint[n]; maxa=0; for(inti=0;i { s[i]=i;//初始配合方案i男配i女 } suma=0; recmaxadv(0); cout delete[]s; return0; } intmain()//主函数 { input(); run();//运行求解函数 cout for(intm=0;m {cout } return0; } 4 4.1系统测试 4.2系统运行 系统运行结果如下: 5课题总结 5.1课题分析 完成了课题要求功能,容易封装便于使用。 5.2团队协作 本次课程设计,让我们感受到了在程序编写软件设计中团队你的力量。一个人的力量对于编写一个大型的程序来说简直是渺茫的,但是编写程序这种工作又是不能忽略每一个个体的,因为只要一个人有一个小小的疏忽,就可能导致整个程序无法运行,甚至崩溃。我们充分利用现代社会知识信息交流充分发展的机会,我们遇到困难时就去学校图书馆查找相关书籍或在网上查找相关资料。今后的学习也应该注重理论与实践的结合,多观察多思考,知道自己所学知识在实际应用中的作用。 5.3个人设计小结(分组员小结) 5.3.1王逸飞设计小结 总体上,巩固了所学的有关c语言的知识,强化了对数据结构的理解。强化了我们对计算机编程*作技能,充实了有关数据结构的理论知识,拓宽了有关数据结构的知识面,通过数据结构课程设计的学习,找到了自身知识点的漏洞与欠缺,加深我们对数据结构的理解,最关键的是对编程思想的理解,对程序开发过程中的有了较深层次的而理解,具体来说,加深了我对基本抽象数据类型的理解,例如结构体链表的*作,间接地也巩固了之前的有关c语言的知识,例如基本数据类型的*作等,文件的*作也更加的熟练。 5.3.1王嘉琦设计小结 通过本次程序设计课程,我发现编程最重要的便是可行以及合理,否则也是毫无用处的程序,没有丝毫意义。刚开始的时候,总是在空想函数该怎样编写,而没有考虑实际生活中图书馆的功能以及工作流程,导致做出来的东西很不切实际。吸取教训了以后,我仔细思考借鉴了我们学校图书馆的*作流程,才写出行之有效的代码。 5.3.1李聪设计小结 此次课程设计,我通过上网查找资料学习,深刻理解了线*表及其应用。查询函数中主要需要对线*表进行访问查询,线*表的访问需要遍历线*表中的元素。在查询函数设计过程中,需要仔细判别输入的条件,考虑各种的可能的查询情况,使程序完善和健壮。通过此次的课程设计我深刻的意识到,要想编好一个程序需要扎实的基本功,需要认真的学习和了解相应的知识。编程前,需要做好算法设计,才能使编程的时候少犯一些算法逻辑错误;编程时,需要不断的编译 及时改掉语法错误的地方避免多个错误累积看不出错误的地方;程序编好后,需要对程序输入极端、特殊情况测试保证程序没有重大的算法漏洞。
第2篇:Java 数据结构
Java语言的安全*较高,那么大家知道Java数据结构是怎样的呢?下面一起来看看!
Java数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:
枚举(Enumeration)
位*(BitSet)
向量(Vector)
栈(Stack)
字典(Dictionary)
哈希表(Hashtable)
属*(Properties)
以上这些类是传统遗留的,在Java2中引入了一种新的框架-*框架(Collection),我们后面再讨论。
枚举(Enumeration)
枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。枚举(TheEnumeration)接口定义了一种从数据结构中取回连续元素的方式。
例如,枚举定义了一个叫nextElement的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。
关于枚举接口的更多信息,请参见枚举(Enumeration)。
位*(BitSet)
位*类实现了一组可以单独设置和清除的位或标志。
该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行*作了。
关于该类的更多信息,请参见位*(BitSet)。
向量(Vector)
向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问。
使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。
关于该类的更多信息,请参见向量(Vector)
栈(Stack)
栈(Stack)实现了一个后进先出(LIFO)的数据结构。
你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。
当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。
关于该类的更多信息,请参见栈(Stack)。
字典(Dictionary)
字典(Dictionary)类是一个抽象类,它定义了键映射到值的数据结构。
当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。
由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
关于该类的更多信息,请参见字典(Dictionary)。
哈希表(Hashtable)
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。
例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。
哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。
关于该类的更多信息,请参见哈希表(HashTable)。
属*(Properties)
Properties继承于Hashtable.Properties类表示了一个持久的属*集.属*列表中每个键及其对应值都是一个字符串。
Properties类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。
关于该类的更多信息,请参见属*(Properties)。
[Java数据结构]相关文章:
第3篇:最佳组合
有一天下午,小刺猬蹦蹦跳跳地来到图书馆看书。它很快找到了自己最喜爱的故事书,想马上坐下来看。
小刺猬看到小兔、小松鼠和小乌龟正坐在座位上聚精会神地看书。它发现小兔的旁边还有一个空位,高兴极了,心想:“这可是最好的座位,我真幸运!看来真是来得早不如来得巧啊!”小刺猬立刻飞奔过去,一屁股坐下去。“哎哟!太扎人了!”小兔大叫着跳了起来。小刺猬连忙也站起来,说“对不起,我不是故意的,你坐吧。”“没关系,你坐吧。”小兔友好地说。小刺猬说:“那怎么行呢,我不坐了,还是你坐吧!”说完,小刺猬扭头就要走。“等等,等等!”小刺猬听见了一个温柔的声音。原来是小乌龟,它正走过来,微笑着对小刺猬说:“你别走,我们可以换一下座位,让小兔跟小松鼠坐,我和你坐,怎么样?”小刺猬疑惑不解,说:“我的刺很扎人,难道你不怕吗?”小乌龟说:“你看我的壳,像盔甲一样**不入,你是伤不到我的。”“哦,原来是这样啊!”小刺猬就高兴地和小乌龟手拉手坐下来看书。
图书馆又恢复了安静。后来,每次到图书馆看书,都是小刺猬和小乌龟坐在一起,小动物们都说它们是最佳组合。