数据结构课程设计.docx

上传人:b****3 文档编号:2792991 上传时间:2022-11-15 格式:DOCX 页数:12 大小:183.23KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共12页
数据结构课程设计.docx_第2页
第2页 / 共12页
数据结构课程设计.docx_第3页
第3页 / 共12页
数据结构课程设计.docx_第4页
第4页 / 共12页
数据结构课程设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

数据结构课程设计报告

题目:

图的遍历和生成树

求解实现

院(系):

计算机工程学院

专业:

嵌入式软件设计

班级:

软件1093

学生:

胡康静

指导教师:

寇海洲张成富

邱军林殷路

 

2010年12月

目录

一、设计目的1

二、设计内容1

三、程序设计步骤1

四、调试分析6

五、测试结果6

六、课程设计小结:

8

一、设计目的

1、熟练掌握如何对给定的一个图进行遍历和生成树的求解方法,采用两种方法对图进行遍历分别是深度优先和广度优先遍历,在生成树的求解时用了Kruskal算法,学会使用邻接矩阵表示。

2、学会在制作程序过程中多思考,充分利用所学知识使程序更完美。

3、提高调试能力,结合数据结构课程中的基本理论知识并通过上机实习,验证算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

4、培养查阅文献资料和自己动手设计程序的能力。

二、设计内容

1、系统名称:

图的遍历和生成树求解实现

2、要求:

(1) 先任意创建一个图;

(2) 图的DFS,BFS的递归和非递归算法的实现;

(3) 最小生成树的实现,求连通分量的实现;

(4) 要求用邻接矩阵、邻接表、十字链表多种结构存储实现。

三、程序设计步骤

1)功能分析说明图:

2)采用主要的数据结构类型:

1、定义弧信息

structArc

{

charpre;

charbak;

intcost;

Arc*link;

};

2、定义图信息

structMGraph

{

charvexs[10];

Arcarcs[10][10];

intvexnum;

intarcnum;

};

3、图和邻接矩阵的创建函数

intcreat(MGraph&G)

{

charv1,v2;

inti,j,k,w;

cout<<"**********创建无向图**********"<

";

cin>>G.vexnum>>G.arcnum;

for(i=0;i

{

cout<<"输入顶点"<

";

cin>>G.vexs[i];

}

for(i=0;i

{

for(j=0;j

{

G.arcs[i][j].cost=weight;

G.arcs[i][j].link=NULL;

}

}

for(k=0;k

{

cout<<"输入一条边顶点和权:

";

cin>>v1>>v2>>w;

i=local(G,v1);

j=local(G,v2);

G.arcs[i][j].cost=w;

G.arcs[j][i].cost=w;

}

cout<<"创建成功!

"<

returnG.vexnum;

}

4、深度优先遍历的函数

voidDFS(MGraphG,bool*visited,inti)

{

cout<

visited[i]=true;

for(intj=0;j

{

if(G.arcs[i][j].cost!

=100&&!

visited[j])DFS(G,visited,j);

}

}

5、广度优先遍历的函数

voidBFS(MGraphG,bool*visited,inti)

{

charq[10];

intfront=0,rear=0;

cout<

visited[i]=true;

q[rear]=G.vexs[i];

intk=front;

for(intj=0;j

{

if(G.arcs[k][j].cost!

=100&&!

visited[j])

{

cout<

visited[j]=true;

rear=(rear+1)%G.vexnum;

q[rear]=G.vexs[j];

}

}

front=(front+1)%G.vexnum;

while(front!

=rear)

{

intj=local(G,q[front]);

for(intk=0;k

{

if(G.arcs[j][k].cost!

=100&&!

visited[k])

{

cout<

visited[k]=true;

rear=(rear+1)%G.vexnum;

q[rear]=G.vexs[k];

}

}

front=(front+1)%G.vexnum;

}

cout<

}

6、最小生成树的函数

voidkruskal(MGraphG,int*arcvisited)

{

Arcedgs[100];

inti,j,k=0,n,m;

for(i=0;i

{

for(j=i;j

{

if(G.arcs[i][j].cost!

=100)

{

edgs[k].pre=G.vexs[i];

edgs[k].bak=G.vexs[j];

edgs[k].cost=G.arcs[i][j].cost;

++k;

}

}

}

charx,y;

intbuf,edf;

for(i=0;i

for(j=0;j

{

m=100;

for(i=0;i

{

if(edgs[i].cost

{

m=edgs[i].cost;

x=edgs[i].pre;

y=edgs[i].bak;

n=i;

}

}

buf=find(G,arcvisited,x);

edf=find(G,arcvisited,y);

edgs[n].cost=100;

arcvisited[buf]=edf;

cout<<"("<

}

}

3)各模块之间的调用方式

各个模块的调用主要是通过声明函数,和定义函数,再通过主函数调用实现的。

主函数:

voidmain()

{

MGraphG;

intd;

d=creat(G);

bool*visited=newbool[G.vexnum];

int*arcvisited=newint[100];

cout<<"图的遍历和生成树求解实现"<

cout<<"**********菜单**********"<

cout<<"0、显示邻接矩阵"<

cout<<"1、深度优先遍历"<

cout<<"2、广度优先遍历"<

cout<<"3、连通分量"<

cout<<"4、KRUSKAL算法"<

ints;

chary='y';

while(y='y')

{

cout<

"<

cin>>s;

switch(s)

{

case0:

cout<<"邻接矩阵显示如下:

"<

print(G);

break;

case1:

cout<<"深度优先遍历序列:

"<

for(inti=0;i

DFS(G,visited,0);

break;

case2:

cout<<"广度优先遍历序列:

"<

for(inti=0;i

BFS(G,visited,0);

break;

case3:

cout<<"连通分量:

"<

DFSCom(G,visited);

break;

case4:

cout<<"最小生成树:

"<

kruskal(G,arcvisited);

break;

}

cout<

y/n:

";

cin>>y;

if(y=='n')break;

}

}

四、调试分析

调试的过程中,经常会出现一些错误,这是在学习中不曾发现的,通过这次实践,发现并改正。

从本实习题的编制过程中容易看出,图的遍历和生成树中,也使用到了队列等内容。

图是一种较线性表和树更为复杂的数据结构。

图中任意两个数据元素之间都可以相关。

采用邻接矩阵即数组表示的方法,对图的遍历分别采用广度优先遍历和深度优先遍历。

通过Kruskal算法求解生成树。

五、测试结果

进入演示程序后,即需要创建图为:

创建成功后,就进入主菜单:

通过选择,可得到图的遍历和生成树的实现:

六、课程设计小结:

通过这次课程设计,我深刻认识了图的基本概念和图的遍历以及生成树。

我知道了我还有很多的不足之处,在设计过程中也遇到了很多的麻烦。

在通过查询了一些资料后,最终才调试出该程序,所以对数据结构的掌握还不够,对一些基本概念不能理解,缺少适当的锻炼,不能够熟练的进行上机实现程序,在这些方面上还需要自己主动去提高。

在程序整体的设计上也不够完善。

这次课程设计给了我很大启发,我明白了,不管遇到什么困难,要坚持不懈,从不同方面去攻破它,终究会成功。

在以后的学习中,我会充分利用上机实验的机会,多加练习,将理论与实际更有效地相结合,努力弥补自己的不足争取在以后获得更好的成绩。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1