数据结构与算法课程设计.docx
- 文档编号:24114687
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:113
- 大小:411.68KB
数据结构与算法课程设计.docx
《数据结构与算法课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计.docx(113页珍藏版)》请在冰豆网上搜索。
数据结构与算法课程设计
摘要
数据结构是计算机软件和计算机应用专业的核心课程之一,在众多的计算机系统软件和应用软件中都要用到各种数据结构。
因此,仅掌握几种计算机语言是难以应付众多复杂的课题,想要有效地使用计算机,还必须学习数据结构的有关知识。
在计算机发展初期,人们使用计算机主要是处理数值计算问题。
由于当时所涉及的运算对象是简单的整型,实型或布尔型数据,所以程序设计者的主要精力是集中于程序设计的技巧上,而无需重视数据结构。
随着计算机应用领域的扩大和软,硬件的发展,“非数值性问题”越来越显得重要。
据统计,当今处理非数值性问题占用了90%以上的机器时间,这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。
因此,解决此类问题的关键已不再是分析数学和计算方法,而是能设计出合适的数据结构,才能有效地解决问题。
著名的瑞士计算机科学家沃思教授曾提出:
算法+数据结构=程序。
这里的数据结构是指数据的逻辑结构和储存结构,而算法则是对数据运算的描述。
由此可见,程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构
关键字:
数据结构、算法分析、树、图、存储结构、线性表
一、运动会分数统计………………………………………………………………5
1、需求分析…………………………………………………………………5
2、概要设计…………………………………………………………………5
3、详细设计…………………………………………………………………10
4、调试分析…………………………………………………………………16
二、一元多项式计算………………………………………………………………17
1、需求分析………………………………………………………………17
2、概要设计………………………………………………………………17
3、详细设计………………………………………………………………18
4、调试分析………………………………………………………………23
三、订票系统………………………………………………………………………28
1、需求分析…………………………………………………………………28
2、概要设计…………………………………………………………………28
3、详细设计…………………………………………………………………33
4、调试分析…………………………………………………………………39
四、迷宫求解………………………………………………………………………40
1、需求分析…………………………………………………………………40
2、概要设计…………………………………………………………………40
3、详细设计…………………………………………………………………41
4、调试分析…………………………………………………………………47
五、文章编辑………………………………………………………………………48
1、需求分析…………………………………………………………………48
2、概要设计…………………………………………………………………48
3、详细设计…………………………………………………………………51
4、调试分析…………………………………………………………………55
六、joseph环……………………………………………………………………57
1、需求分析…………………………………………………………………57
2、概要设计…………………………………………………………………57
3、详细设计………………………………………………………………57
4、调试分析………………………………………………………………59
七、猴子选大王…………………………………………………………………60
1、需求分析………………………………………………………………60
2、概要设计………………………………………………………………60
3、详细设计………………………………………………………………65
4、调试分析………………………………………………………………69
八、建立二叉树,后序、先序遍历……………………………………………70
1、需求分析………………………………………………………………70
2、概要设计………………………………………………………………70
3、详细设计………………………………………………………………70
4、调试分析………………………………………………………………72
九、哈夫曼树的建立……………………………………………………………73
1、需求分析………………………………………………………………73
2、概要设计………………………………………………………………73
3、详细设计………………………………………………………………74
4、调试分析………………………………………………………………78
一十、纸牌游戏……………………………………………………………………79
1、需求分析………………………………………………………………79
2、概要设计………………………………………………………………79
3、详细设计………………………………………………………………80
4、调试分析………………………………………………………………80
一十一、图的建立及输出………………………………………………………81
1、需求分析………………………………………………………………81
2、概要设计………………………………………………………………81
3、详细设计………………………………………………………………82
4、调试分析………………………………………………………………84
课程总结…………………………………………………………………………85
课程设计过程中的课程设计进展情况…………………………………………86
参考文献…………………………………………………………………………87
一、运动会分数统计
1、需求分析:
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
(1)、可以输入各个项目的前三名或前五名的成绩;
(2)、能统计各学校总分;
(3)、可以按学校编号、学校总分、男女团体总分排序输出;
(4)、可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:
有中文提示,各学校分数为整型
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明.
2、概要设计
本程序中学校的存储结构为链表,
其中
school类为:
classschool:
publicathlete/*学校*/
{
……
public:
intcount;/*学校获奖数*/
intserial;/*学校编号*/
intmenscore;/*男选手总分*/
intwomenscore;/*女选手总分*/
inttotalscore;/*总分*/
athleteath[MaxSize];/*获奖运动员信息数组,包括分数,名次,项目*/
school*prev;//前指针
school*next;//后指针
};
其中部分主要的函数:
添加操作add(school*&head)
查询操作checkFunc(school*head,int&n)
文件保存save(school*head)
总分快速排序tquicksort(vector
总分基数排序tbaseSort(vector
关键算法
{……
添加项目号
for(i=1;i<=n;i++)
{输入第i名运动员的学校编号temp
……
while(first!
=head)//遍历链表,直到找到编号为serial的学校所在结点,或first指向表头head
{if(first->serial==要添加的编号)
{
(first->ath[first->count]).item=要添加的项目号;
(first->ath[first->count]).range=i(名次)
First指向的学校的项目加一;
更新总分
break;}
first=first->next;
……}
查询操作:
while(first!
=head)
{……
if(输入的项目编号==学校第i位运动员的项目)
{
把第i位运动员的项目,学校编号、名次、得分信息压入向量;
}……
}
first=first->next;
……
输出向量中的内容
1.所有学校总分统计表
2.学校成绩查询
3.项目情况查询
4.返回主菜单
1.按学校编号统计
2.按学校名次统计
3.按男团总分统计
4.按女团总分统计
5.返回查询菜单
6.返回主菜单
//按学校编号顺序输出所有参赛学校运动会成绩
voidserialSort(vector
{
for(inti=0;i { cout<<*v[i]; } } 3、详细设计 #include #include #include #include #defineNULL0 #defineMaxSize30 typedefstructathletestruct/*运动员*/ { charname[20]; intscore;/*分数*/ intrange;/**/ intitem;/*项目*/ }ATH; typedefstructschoolstruct/*学校*/ { intcount;/*编号*/ intserial;/**/ intmenscore;/*男选手分数*/ intwomenscore;/*女选手分数*/ inttotalscore;/*总分*/ ATHathlete[MaxSize];/**/ structschoolstruct*next; }SCH; intnsc,msp,wsp; intntsp; inti,j; intovergame; intserial,range; intn; SCH*head,*pfirst,*psecond; int*phead=NULL,*pafirst=NULL,*pasecond=NULL; create() { pfirst=(structschoolstruct*)malloc(sizeof(structschoolstruct)); pfirst->next=head->next; head->next=pfirst; pfirst->count=1; pfirst->menscore=0; pfirst->womenscore=0; pfirst->totalscore=0; } input() { charanswer; head=(SCH*)malloc(sizeof(SCH));/**/ head->next=NULL; pfirst=head; answer='y'; while(answer=='y') { Is_Game_DoMain: printf("\nGETTop5whenodd\nGETTop3wheneven"); printf("\n输入运动项目序号(x<=%d): ",ntsp); scanf("%d",pafirst); overgame=*pafirst; if(pafirst! =phead) { for(pasecond=phead;pasecond { if(overgame==*pasecond) { printf("\n这个项目已经存在请选择其他的数字\n"); gotoIs_Game_DoMain; } } } pafirst=pafirst+1; if(overgame>ntsp) { printf("\n项目不存在"); printf("\n请重新输入"); gotoIs_Game_DoMain; } switch(overgame%2) { case0: n=3;break; case1: n=5;break; } for(i=1;i<=n;i++) { Is_Serial_DoMain: printf("\n输入序号oftheNO.%d(0 ",i,nsc); scanf("%d",&serial); if(serial>nsc) { printf("\n超过学校数目,请重新输入"); gotoIs_Serial_DoMain; } if(head->next==NULL) { create(); } psecond=head->next; while(psecond! =NULL) { if(psecond->serial==serial) { pfirst=psecond; pfirst->count=pfirst->count+1; gotoStore_Data; } else { psecond=psecond->next; } } create(); Store_Data: pfirst->athlete[pfirst->count].item=overgame; pfirst->athlete[pfirst->count].range=i; pfirst->serial=serial;("Inputname: ): "); scanf("%s",pfirst->athlete[pfirst->count].name); } printf("\n继续输入运动项目(y&n)? "); answer=getch(); printf("\n"); } } calculate()/**/ { pfirst=head->next; while(pfirst->next! =NULL) { for(i=1;i<=pfirst->count;i++) { if(pfirst->athlete[i].item%2==0) { switch(pfirst->athlete[i].range) { case1: pfirst->athlete[i].score=5;break; case2: pfirst->athlete[i].score=3;break; case3: pfirst->athlete[i].score=2;break; } } else { switch(pfirst->athlete[i].range) { case1: pfirst->athlete[i].score=7;break; case2: pfirst->athlete[i].score=5;break; case3: pfirst->athlete[i].score=3;break; case4: pfirst->athlete[i].score=2;break; case5: pfirst->athlete[i].score=1;break; } } if(pfirst->athlete[i].item<=msp) { pfirst->menscore=pfirst->menscore+pfirst->athlete[i].score; } else { pfirst->womenscore=pfirst->womenscore+pfirst->athlete[i].score; } } pfirst->totalscore=pfirst->menscore+pfirst->womenscore; pfirst=pfirst->next; } } output() { pfirst=head->next; psecond=head->next; while(pfirst->next! =NULL) { //clrscr(); printf("\n第%d号学校的结果成绩: ",pfirst->serial); printf("\n\n项目的数目\t学校的名字\t分数"); for(i=1;i<=ntsp;i++) { for(j=1;j<=pfirst->count;j++) { if(pfirst->athlete[j].item==i) { printf("\n%d\t\t\t\t\t\t%s\n%d",i,pfirst->athlete[j].name,pfirst->athlete[j].score);break; } } } printf("\n\n\n\t\t\t\t\t\t按任意建进入下一页"); getch(); pfirst=pfirst->next; } //clrscr(); printf("\n运动会结果: \n\n学校编号\t男运动员成绩\t女运动员成绩\t总分"); pfirst=head->next; while(pfirst->next! =NULL) { printf("\n%d\t\t%d\t\t%d\t\t%d",pfirst->serial,pfirst->menscore,pfirst->womenscore,pfirst->totalscore); pfirst=pfirst->next; } printf("\n\n\n\t\t\t\t\t\t\t按任意建结束"); getch(); } //create() voidSave() {FILE*fp; if((fp=fopen("school.dat","wb"))==NULL) {printf("can'topenschool.dat\n"); fclose(fp); return; } fwrite(pfirst,sizeof(SCH),10,fp); fclose(fp); printf("文件已经成功保存\n"); } main() { system("cls"); printf("\n\t\t\t运动会分数统计\n"); printf("输入学校数目(x>=5): "); scanf("%d",&nsc); printf("输入男选手的项目(x<=20): "); scanf("%d",&msp); printf("输入女选手项目(<=20): "); scanf("%d",&wsp); ntsp=msp+wsp; phead=calloc(ntsp,sizeof(int)); pafirst=phead; pasecond=phead; input(); calculate(); output(); Save(); } 4、调试分析 时间复杂度分析: O( ) 二、一元多项式计算 1、需求分析 能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 在上交资料中请写明: 存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法. 课程设计的目的 (1)掌握算法的编写方法。 (2)掌握类C语言的算法转换成C程序并上机调试的基本方法。 (3)设计一个C语言程序,该程序具有能够按照指数降序排列建立并输出多项式, 完成两个多项式的相加、相减,并将结果输入的功能。 2、概要设计 问题描述 用C语言编写一段程序,该程序的功能相当于一个一元多项式计算器。 它能够实现按照指数降序排列建立并输出多项式,并且能够完成两个多项式的相加、相减的运算和将其结果输入的功能。 数据结构设计 此程序的数据结构是选择用带表头结点的单链表存储多项式。 虽然一元多项式可以用顺序和链式两种存储结构表示,但顺序结构的最大长度很难确定。 比如当多项式的系数较大时,此时就会浪费了巨大的存储空间,所以应该选择用链式存储结构来存储一元多项式。 单链表的结构体可以用来存储多项式的系数,指数,下一个指针3个元属,这样便于实现任意多项式的加法,减法运算。 功能模块图思路设计 (1)一元多项式的建立 输入多项式采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时就继续,当输入0时,就结束一个多项式的输入。 (2)显示一元多项式 如果系数是大于0的话就输出+系数x^指数的形式;如果系数是小于0的话就输出系数x^指数的形式;如果指数为0的话,直接输出系数;如果系数是1的话就直接输出+x;如果系数是-1的话就直接输出-x。 (3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)