数构课程设计Word下载.docx
- 文档编号:20321740
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:205.04KB
数构课程设计Word下载.docx
《数构课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《数构课程设计Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
1.2、要求1
2、总体设计1
2.1、功能模块设计1
2.2、所有功能模块的流程图1
3、详细设计1
3.1、程序中所采用的数据结构及存储结构的说明1
3.2、算法的设计思想2
4、调试与测试:
2
4.1、调试方法与步骤:
4.2、测试结果的分析与讨论:
4.3、测试过程中遇到的主要问题及采取的解决措施:
3
5、源程序清单和执行结果3
6、C程序设计总结7
7、致谢7
8、参考文献7
1、课程设计的目的
1.掌握网络的邻接表存储结构。
2.掌握优先队列的基本运算实现。
3.掌握网络的邻接表的算法实现。
4.掌握网络的最小生成树Prim算法实现。
2、课程设计的要求
对任意给定的网络(顶点数和边数自定),建立它的邻接矩阵、邻接表并输出,然后利用Prim算法或Kruskal算法生成它的最小生成树,并输出结果。
3、课程设计的内容
3.1需求分析
所谓邻接矩阵存储结构,就是用一维数组存储图或网的顶点信息,用二维数组表示顶点之间的邻接关系。
邻接表试图和网的一种链式存储结构。
在邻接表中,对图或网中的每个顶点建立一个单链表,第i个单链表中的结点是与vi相关联的边所连接的结点。
每个结点由3个域(adjvex,info,next)组成,其中邻接点域adjvex指示与顶点vi邻接的点在图中的位置,链域next指示下一条边或弧所连接的结点,数据域info存储和边或弧相关信息。
每个单链表都附设一个表头结点(由data域和next域组成),链域next指向链表中的第一个结点外,data域存放顶点vi的有关信息。
并将这些表头结点组织为一个单链表。
3.2概要设计
Prim算法是从连通网中的某顶点开始,以此作为生成树的初始状态,然后不断地将网中的其他顶点添加到生成树上,直到最后一个顶点添加到添加到生成树上时得到最小生成树。
具体方法:
(1)从网中任一顶点开始,先把该顶点包含在生成树中,此时生成树只有一个顶点。
(2)找出一个端点在生成树中另一个端点在生成树外的所有边,并把权值最小的边连同它所关联的另一个顶点添加到生成树中;
当有两条以上具有相同最小权值的边可供选择时,选择其中任意一条都可以。
(3)反复执行
(1),直到所有顶点都包含在生成树中时为止。
主函数流程图如下:
Prim函数流程图如下:
3.3详细设计
#include"
stdio.h"
#include"
malloc.h"
#definemaxvernum100
#definemax99
typedefcharvertextype;
/*顶点类型(可根据需要进行修改)*/
typedefstruct
{vertextypevex[maxvernum];
/*定义顶点向量基类型为顶点类型*/
intadjmatrix[maxvernum][maxvernum];
/*定义邻接矩阵为为整型,也可定义为权类型*/
intn,e;
/*定义顶点数和边或弧数变量单元*/
}magraphtype;
/*magraphtype为以邻接矩阵存储的网类型标识符*/
typedefstructnode/*定义表结点的结构*/
{intadjvex,info;
/*邻接点域、数据域设为整型*/
structnode*next;
/*链域,指向下一个结点的指针*/
}nodetype;
typedefstructfrontnode/*定义表头结点的结构*/
{vertextypedata;
/*定义表头结点结构*/
/*数据域为顶点类型*/
}frontnodetype;
voidprim(magraphtypeg,intk,intn)/*prim算法的实现*/
{inti,j,min,p;
struct
{intadjvex,lowcost;
}closedge[maxvernum];
for(i=1;
i<
=n;
i++)/*辅助数组初始化*/
if(i!
=k)
{closedge[i].adjvex=k;
closedge[i].lowcost=g.adjmatrix[k][i];
/*填边的权值*/
}
closedge[k].lowcost=0;
/*顶点vk已在生成树中,修改辅助数组*/
n;
i++)/*循环n-1次,选n-1条边与生成树中*/
{p=1;
min=max;
for(j=2;
j<
=n+1;
j++)/*选最小权值及对应顶点*/
if(closedge[j].lowcost!
=0&
&
closedge[j].lowcost<
min)
{min=closedge[j].lowcost;
/*最小权值记在min中*/
p=j;
/*把于边关联的生成树外的顶点序号记在p中*/
}
printf("
%c__%c%d\n"
g.vex[closedge[p].adjvex],g.vex[p],min);
/*输出最小边及权值*/
closedge[p].lowcost=0;
/*将顶点vp放入生成树中*/
j++)/*修改辅助数组的相应值,以便下一次选最小权值的边*/
if(g.adjmatrix[p][j]<
closedge[j].lowcost)
{closedge[j].lowcost=g.adjmatrix[p][j];
/*修改权值域*/
closedge[j].adjvex=p;
/*记下边在生成树一端的顶点序号*/
}
}
voidmain()
{inti,j,k;
charq;
magraphtypemagraph;
frontnodetypeadjlist[maxvernum];
/*定义adjlist为邻接表类型*/
nodetype*head,*r,*p;
n:
"
);
scanf("
%d"
&
magraph.n);
e:
magraph.e);
输入各顶点的数据:
\n"
=magraph.n;
i++)
{fflush(stdin);
/*清空内存中的键盘缓冲区,以免回车符被获取*/
%c"
magraph.vex[i]);
adjlist[i].data=magraph.vex[i];
输入各边权值(邻接矩阵的下三角即可)\n"
for(i=1;
{for(j=1;
=i;
j++)
{scanf("
magraph.adjmatrix[i][j]);
magraph.adjmatrix[j][i]=magraph.adjmatrix[i][j];
vexs:
/*输出顶点*/
%c"
magraph.vex[i]);
\n邻接矩阵:
/*输出邻接矩阵*/
printf("
%-4d"
magraph.adjmatrix[i][j]);
邻接表:
/*创建邻接表*/
i++)
{adjlist[i].next->
next=NULL;
r=adjlist[i].next;
for(j=1;
{if(magraph.adjmatrix[i][j]!
=99)
{p=(nodetype*)malloc(sizeof(nodetype));
p->
adjvex=j;
p->
info=magraph.adjmatrix[i][j];
r->
next=p;
r=r->
next;
else;
[%d]%c"
i,adjlist[i].data);
/*输出邻接表*/
r=adjlist[i].next->
if(r!
=NULL)
do{printf("
-->
[%d]%-2d"
r->
adjvex,r->
info);
r=r->
while(r!
=NULL);
pleasechoiceavex:
/*选择最小生成树的出发结点*/
fflush(stdin);
q);
if(q==adjlist[i].data)
{k=i;
/*将所选结点所对应的序号赋给k*/
break;
最小生成树:
prim(magraph,k,magraph.n);
/*建立最小生成树*/
3.4程序调试与测试结果。
3.5结果分析
由具体结果及分析知:
该系统的各项功能基本能够实现,各项功能的实现细节考虑还算周到,而且能够达到预期的效果,但是还有一些不足之处,比如实现的功能过于简单,还有一些问题仍无法解决,由于本人的能力有限,所以也只能达到这种程度,希望今后有更大的提升空间。
4、总结
这是一次很好的课程设计,通过这次的课程设计,学习了网络的邻接表存储结构、优先队列、网络的邻接表的算法实现,以及网络的最小生成树Prim算法实现;
通过对这些算法的源代码的调试及运行,遇到了一些细节性的问题,比如:
多加了一个“}”,或者是少写了“;
”等等。
通过这一次课程设计我的各方面能力得到了有效的检测,课程设计提高很多我意想不到的东西,那是在一般的学习中无法找到的,所以认真对待每一件事也是我学到的很重要的东西。
5、参考文献
[1]严蔚敏,陈文博编著.数据结构及应用算法教程.北京:
清华大学出版社
[2]宁正元.数据结构-用C语言描述.北京:
中国水利水电出版社,2000
[3]苏仕华主编.数据结构自学辅导.北京:
清华大学出版社,2002
[4]宁正元,王秀丽.算法与数据结构.北京:
清华大学出版社,2006.
[5]唐浩强.C程序设计(第三版).北京:
清华大学出版社,2005.
6、附录
typedefstruct
}magraphtype;
typedefstructnode
}nodetype;
typedefstructfrontnode
}frontnodetype;
voidprim(magraphtypeg,intk,intn)
for(i=1;
j++)
{fflush(stdin);
printf("
fflush(stdin);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计