+数据结构课程设计报告+文档格式.docx
- 文档编号:8603878
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:53
- 大小:106.82KB
+数据结构课程设计报告+文档格式.docx
《+数据结构课程设计报告+文档格式.docx》由会员分享,可在线阅读,更多相关《+数据结构课程设计报告+文档格式.docx(53页珍藏版)》请在冰点文库上搜索。
4.调试分析
运行时显示:
输入abcde时:
输入110时:
这时按任意键则返回编辑窗口
2.2运动会分数统计
1.任务:
参加运动会有n个学校,学校编号为1……n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1……m,女子m+1……m+w.不同的项目取前五名或前三名积分;
取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;
哪些取前五名或前三名由学生自己设定.(m<
=20,n<
=20).
2.功能要求:
1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分, 3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;
可以按项目编号查询取得前三或前五名的学校.
3.规定:
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
4.抽象数据类型结构体数组的定义如下:
#defineM6/*6个男子项目*/
#defineW4/*4个女子项目*/
#defineN10
typedefstruct{
intman[5+1];
/*排名,此数组中存放学校代码*/
intwomen[3+1];
charIname[M+W+1];
/*项目名称*/
}Item;
/*项目代码,<
M的为男子,>
M的为女子*/
intscoreT;
/*学校总分*/
intscoreM;
/*男子总分*/
intscoreW;
/*女子总分*/
intman[M+1];
/*男子项目*/
intwomen[W+1];
/*女子项目*/
intflag;
/*排序用旗帜*/
}School;
ItemiteM[M+W+1];
/*M+W个项目*/
Schoolsch[N+1];
/*n个学校,0不用*/
charname[N+1][100];
voidInput()//输入函数
voidInitial()//初始化函数
voidSchool_F()//按学校代码查询函数
voidItem_F()//运动项目查询函数
voidFind()//查询菜单函数
voidOrder_ST()//总分排序函数
voidOrder_SM()//男子总分排序函数
voidOrder_SW()//女子总分排序函数
voidFind_O()//排序菜单函数
voidOutput()//输出到文件函数
void
5.本程序包括5个模块
a.主程序模块:
Voidmain()
{Do
{接受命令;
处理命令;
}while(“命令”=退出);
}
b.信息输入模块——实现信息的输入;
c.信息查询模块——实现信息的查询;
d.信息排序查询模块——实现各种的有序输出;
e.信息存盘模块——实现输出到文件.
各模块的关系如下:
主程序模块——信息输入模块——信息查询——信息排序查询模块—信息存盘模块.
6.流程图
主函数
欢迎界面
选择功能scanf("
%d"
&
a)
If(i=1)
If(i=2)
If(i=3)
成绩输入
查询
排序查询
选择功能
For(i=1;
i<
=N;
i++)项目个数
输入项目代码及名称
输入男子项目前五名
输入女子项目前三名
查询
Scanf(“%d”,&
a);
T=1
t=2
T=3
按学校代码
按项目编号
返回上一级菜单
排序查询
选canf(“%d”,&
a=1
a=2
按学校总分查询
按男团总分查询
7.调试分析
a.本程序在项目上采用了数字代码操作,并且能同步输入输出项目名和学校名.实现方法为在学校结构体内增加字符数组用来存储学校的名称.缺点就是没有考虑有一个学生参加两项比赛的情况,这就要再次增加循环参加比赛的数目.
b.算法的时空分析
(1)本程序时间复杂度为N*N主要集中在按积分排序的过程,在排序时采用了冒泡排序,而且在交换数据时也较大地耗费内存,至今未能解决..
(2)另外一点在于项目查询时,会增加时间复杂度,为了减少时间复杂度,我把按项目查找分为按女子和按男子查找,这样在查询项目时可先判断是男子项目还是女子项目,再查找,这样就减少时间复杂度.
(3)在空间复杂度方面,本程序几乎没有用到辅助空间,只是未用到所有的数组,会浪费一些存储空间.
8.测试结果
这是在学校个数为1,项目数为2(包括一个男子项目一个女子项目)时的输出文件情况:
1a学校
总分:
7,男子总分:
7,女子总分:
0
2b学校
5,女子总分:
2
3c学校
6,男子总分:
3,女子总分:
8
4d学校
2,男子总分:
2,女子总分:
5e学校
1,女子总分:
5
6学校
0,男子总分:
0,女子总分:
7学校
8学校
9学校
10学校
男子项目1排名:
第1名:
1第2名:
2第3名:
3第4名:
4第5名:
5
男子项目2排名:
0第2名:
0第3名:
0第4名:
0第5名:
0
男子项目3排名:
男子项目4排名:
男子项目5排名:
男子项目6排名:
女子项目7排名:
女子项目8排名:
5第2名:
3第3名:
2
女子项目9排名:
女子项目10排名:
2.3订票系统
1.任务:
通过此系统可以实现如下功能:
a.录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
b.查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
c.订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
d.退票:
可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号.
修改航班信息:
当航班信息改变可以修改航班数据文件
2.要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
3.具体概要设计
a.抽象类型定义如下
structFlaight{
charflaNum[10];
/*航班号*/
charfTime[10];
/*起飞时间*/
charlTime[10];
/*降落时间?
*/
charfCity[30];
/*起飞城市*/
charlCity[30];
/*降落城市*/
intfprice;
/*票价*/
charpriOf[10];
/*折扣*/
intseat;
/*座位数*/
structFlaight*next;
};
structCustom/*客户资料*/
{charCname[30];
/*客户姓名*/
charID[30];
/*证件号*/
intTicketN;
/*订票数量*/
charFlaN[10];
charListN[60];
/*订单编号*/
structCustom*next;
structFlaight*head1=NULL;
structCustom*head2=NULL;
b.本程序包含三个模块
(1)主程序模块:
{
do{
接受命令;
处理命令;
}while(命令!
=退出);
(2)信息输入模块——完成基本信息的输入
(3)实现功能模块——实现各种功能操作
(4)读写文件模块——实现文件建立和读写
4.流程图
主函数模块
Menu菜单
Case1
Case2
Case3
Case4
Case5
Case6
订票
修改
存盘
文件读入
显示信息
查询航班信息
printf("
xxxx航班-->
:
"
);
输入航班号;
for(p1=head1->
next;
p1->
next!
=NULL;
p1=p1->
next)
if(p1!
=NULL)
输出所查询航班的信息
航班信息修改模块
while()
{p1=p1->
print("
请选择功能:
输入功能号
Cas1
Cas2
Cas3
Case6
Case7
Case8
起飞时间
抵达时间
起飞地
目的地
票价
折扣
总座位数
跳出
5.调试分析
原始信息:
航班:
ca112:
5013:
10长沙广州1340.310ca215:
4501:
50南京香港2140.43
ca319:
2104:
31长沙广州4310.85ca401:
3007:
04重庆长春3100.76
ca502:
0810:
56上海汉城1260.410ca620:
1822:
47东京纽约9870.976
ca1014:
0123:
59重庆长春8750.812ca1105:
0922:
12南京香港4220.343
ca1212:
0416:
54东京纽约9860.632
客户:
rayxy32ca1rayxy3samgh43ca3samgh4Andybo51ca4Andybo5
姚明Rockets10ca10姚明RocketsKobeLakers6ca5KobeLakers
曼联英格兰10ca12曼联英格兰
运行后:
ca1125013:
10长沙广州1340.36ca215:
50南京香港2140.43
31长沙广州4310.85ca134e01:
04重庆长春3100.76
47东京纽约3450.976
59重庆长春8750.80ca1105:
12南京香港4220.343
54东京纽约9860.632
rayxy32ca1rayxy3samgh43ca3samgh4Andybo51ca4Andybo5姚明Rockets10ca10姚明RocketsKobeLakers6ca5KobeLakers曼联英格兰10ca12曼联英格兰
2.4猴子选大王
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王.
2.要求:
输入数据:
输入m,n为整数,n<
m
输出形式:
中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能
3.概要设计:
基本思路是以链表顺序储存猴子的信息,利用计数器完成操作,最后打印出是第几个猴子
存储结构:
循环链表
定义:
表中最后一个结点的指针指向第一个结点
输入10时:
这时再输入5:
3.总结与展望
通过为期半个月的课程设计,我们对《数据结构》这门课程有了更深一步的了解.它是计算机程序设计的重要理论技术基础,在我们计算机专业的学习中占据着十分重要的地位.同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力.因为我们学习知识就是为了实践.而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西.
这次课程设计也让我们明白拉“团结就是力量”的魅力.大家一起合作,一起讨论、一起研究,充分发挥团队精神,各尽其责,按时,按进度完成各自的任务,是我们能够把这个程序按时做出来的关键!
在我们组员的通力合作下,我们按照制定的计划,终于顺利地完成了这个程序.这使得我们相信:
无论是在以后的学习还是生活中,只要我们充分发挥团队合作的精神,一定可以克服种种困难,争取更大的成功!
本次设计我们也首次使用拉WIN-TC进行编译,摆脱拉TC环境下编译的弊端,WIN-TC的编译使我们的本次课程设计更加美观.但是也有不如意的地方,做的不好的地方,望老师谅解,我们会在以后的学习、设计中努力改进,做得更加完美.
4.参考文选
[1]严蔚敏,吴伟民编著,数据结构(C语言版),北京;
清华大学出版社,2005
[2]严蔚敏,陈文博编著,数据结构及应用算法教程,北京;
清华大学出版社,2006
[3]李云清,杨庆红,揭安全编著,数据结构(C语言版),北京;
人民邮电出版社,2006
[4]谭浩强编著,C语言程序设计(第二版),北京;
清华大学出版社,2003
[5]各大网站
1.赫夫曼树的建立
#include<
stdio.h>
#include<
stdlib.h>
#defineMAXLEN100
typedefstructHuffmantree{
charch;
/*键值*/
intweight,mark;
/*weight为权值,mark为标志域*/
structHuffmantree*parent,*lchild,*rchild,*next;
}Hftree,*linktree;
/*整理输入的字符串,合并相同的项,并求出每个字符在数组中出现的次数*/
linktreetidycharacter(charcharacter[])
inti=0;
linktreetree,ptr,beforeptr,node;
/*链式,tree为头结点,beforeptr为ptr的前一结点,node为新申请
的结点*/
tree=(linktree)malloc(sizeof(Hftree));
/*创建单链表的头结点*/
if(!
tree)returnNULL;
tree->
next=NULL;
/*头结点为空,且后续结点为空*/
for(i=0;
character[i]!
='
\0'
&
\n'
;
i++){/*遍历直到字符串结束为止*/
ptr=tree;
beforeptr=tree;
node=(linktree)malloc(sizeof(Hftree));
/*新申请结点node*/
node)returnNULL;
node->
parent=NULL;
lchild=NULL;
rchild=NULL;
/*置空*/
mark=0;
ch=character[i];
weight=1;
if(tree->
next==NULL)
next=node;
/*头结点的下一结点为空,连接node*/
else{
ptr=tree->
while(ptr&
ptr->
ch!
=node->
ch){/*将指针移至链表尾*/
ptr=ptr->
beforeptr=beforeptr->
/*后移*/
if(ptr&
ch==node->
ch){/*如果链表中某结点的字符与新结点的字符相同*/
/*将该结点的权加一*/
weight=ptr->
weight+1;
free(node);
/*释放node结点的存储空间*/
else{/*新结点与表中结点不相同,将新结点插入链表后*/
next=beforeptr->
beforeptr->
/*node连接在beforeptr之后*/
returntree;
/*将整理完的字符串按出现次数从小到大的顺序排列*/
linktreetaxisnode(linktreetree)
{
linktreehead,ph,pt,beforeph;
/*head为新链表的表头结点*/
head=(linktree)malloc(sizeof(Hftree));
/*创建新链表的头结点*/
head)returnNULL;
head->
/*新结点的头结点为空,后续结点也为空*/
ph=head;
beforeph=head;
while(tree->
next){
pt=tree->
/*取被操作链表的首元结点*/
next=pt->
pt->
/*取出pt所指向的结点*/
ph=head->
if(head->
next=pt;
/*创建当前操作链表首元结点*/
else{
while(ph&
ph->
weight<
weight){/*将被操作结点插入相应位置*/
ph=ph->
beforeph=beforeph->
next=beforeph->
beforeph->
free(tree);
returnhead;
/*用排完序的字符串建立霍夫曼树*/
linktreecreateHftree(linktreetree)
linktreep,q,newnode,beforep;
for(p=tree->
next,q=p->
p!
=NULL&
q!
p=tree->
next){
next=q->
q->
p->
newnode=(linktree)malloc(sizeof(Hftree));
/*申请新结点作为霍夫曼树的中间结点*/
newnode)returnNULL;
newnode->
lchil
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告