数据结构-邻接表存储及遍历-课程设计-实验报告。
更新时间:2023-05-11 23:04:01 阅读量: 实用文档 文档下载
数 据 结 构 课 程 设 计
设计题目:学生姓名:专业班级:指导教师:完成时间:
邻接表存储及遍历
数据结构(c 语言版)课程设计报告
课题名称 院 学 系 号
邻接表存储及遍历 年级专业 姓 名 成 绩
1、课题设计目的:①通过实习掌握《数据结构》中的知识。对于本 课题所要求掌握的数据结构知识主要有:图的邻接表储存结构、邻 接表的算法实现、图的广度优先搜索遍历、图的深度优先搜索遍历。 2、课题设计意义:①培养学生运用数据结构的基本知识解决实际编 程中的数据结构设计和设计问题。 课题设计 ②培养学生独立设计程序与解决问题的能力,培养学生团队协作集 目的与 成程序模块及调试能力。 设计意义
指导教师: 年 月 日
目 录
第一章 需求分析 ....................................................................................................................................... 1
1.1 图 ................................................................................................................................................ 1 1.2 邻接表的概念 ........................................................................................................................... 1 1.3邻接表的表示法 .......................................................................................................................... 1 第二章 概要分析 ..................................................................................................................................... 2
2.1 无向图 ....................................................................................................................................... 2 2.2 有相图......................................................................................................................................... 2 2.3 无向图 ....................................................................................................................................... 2 2.4有向图.......................................................................................................................................... 2 第三章 详细分析 ....................................................................................................................................... 3
3.1 邻接表的建立 ............................................................................................................................. 3 3.2 邻接表的建立过程如下: ....................................................................................................... 3
3.2.1无向图邻接表的建立 ...................................................................................................... 3 3.2.2 有向图邻接表的建立 ..................................................................................................... 4 3.3 邻接表的输出过程如下: ....................................................................................................... 4 3.4 邻接表的遍历 ........................................................................................................................... 5
3.4.1 连通图的深度优先搜索遍历 ....................................................................................... 5 3.4.2 有向图的广度优先搜索遍历 ....................................................................................... 6 3.5 流程图 ....................................................................................................................................... 7
3.5.1 主流程图 ..................................................................................................................... 7 3.5.2 无向图邻接表的流程图 ............................................................................................... 7 3.5.3 有向图邻接表的流程图 ............................................................................................... 9
第四章 测试分析 ..................................................................................................................................... 11
4.1 无向图....................................................................................................................................... 11
4.1.1 主程序main()编写如下: ...................................................................................... 11 4.1.2 运行步骤 ..................................................................................................................... 13 4.2 有向图....................................................................................................................................... 15 第五章 心得体会 ..................................................................................................................................... 17 第六章、参考文献 ................................................................................................................................... 17
第一章 需求分析
1.1 图
①若图1.1 ②若图1.1
v2
图1.1 1.2 邻接表的概念
对于图1.1中的每个顶点vi,该方法把所有邻接于vi
的顶点vj链成一个单链表,这个单链表就称为顶点vi的邻接表。
1.3邻接表的表示法
邻接表中每个表结点均有2个域,其一是邻接点域(adjvex),用以存放与vi相邻接的顶点vj的序号;其二是链域(next),用来将邻接表的所有表结点链在一起。
并且为每个顶点vi的邻接表设置一个具有2个域的表头结点:一个是顶点域(vertex),用来存放顶点vi的信息;另一个是指针域(link),用于存入指向vi的邻接表中第一个表结点的头指针。
第二章 概要分析
2.1 无向图
无向图邻接表的建立,无向图邻接表的输出,无向图邻接表的深度优先搜索遍历,无向图邻接表的广度优先搜索遍历。
2.2 有相图
有向图邻接表的建立,有向图邻接表的输出,有向图邻接表的深度优先搜索遍历,有向图邻接表的广度优先搜索遍历。
2.3 无向图
2.4有向图
第三章 详细分析
3.1 邻接表的建立
邻接表是把所有邻接于vi的顶点vj链成一个单链表。其次还需要一个顺序表来储存顶点信息。其具体C语言代码如下: typedef struct node {
int adjvex;/*邻接点域*/ struct node *next;/*链域*/ }edgenode;/*边表结点*/
3.2 邻接表的建立过程如下:
3.2.1无向图邻接表的建立
void creat_ljb(topnode gl[],int n,int e) /*无向图邻接表的建立*/ {
int i,j,k; edgenode *p; getchar();
printf("请输入%d个顶点的元素:",n); for(i=0;i<n;i++)/*读入顶点信息*/ {
scanf("%c",&gl[i].topvex);
gl[i].link=NULL; /*边表头指针初始化*/ }
printf("请输入要邻接的俩个顶点的下标:\n"); for(k=0;k<e;k++) /*建立边表*/ {
scanf("%d%d",&i,&j);
p=(edgenode *)malloc(sizeof(edgenode)); p->adjvex=j;
p->next=gl[i].link; gl[i].link=p;
p=(edgenode *)malloc(sizeof(edgenode)); p->adjvex=i; p->next=gl[j].link; gl[j].link=p; } }
3.2.2 有向图邻接表的建立
void creat_yljb(topnode gl[],int n,int e)/*有向图邻接表的建立*/ {
int i,j,k; edgenode *p; getchar();
printf("请输入%d个顶点的元素:",n); for(i=0;i<n;i++) {
scanf("%c",&gl[i].topvex); gl[i].link=NULL; }
printf("请输入要邻接的俩个顶点的下标:\n"); for(k=0;k<e;k++) {
scanf("%d%d",&i,&j);
p=(edgenode *)malloc(sizeof(edgenode)); p->adjvex=j; p->next=gl[i].link; gl[i].link=p; } }
3.3 邻接表的输出过程如下:
void print_ljb(topnode gl[],int n)/*邻接表的输出*/
{
int i; edgenode *p;
printf("建立后的邻接表为:\n"); for(i=0;i<n;i++) {
printf("%c\t",gl[i].topvex); p=gl[i].link; while(p) {
printf("%d\t",p->adjvex); p=p->next; }
printf("\n"); } }
3.4 邻接表的遍历
对于图的遍历,和树的遍历类似,也是从某个顶点出发,沿着搜索路径对图中所有顶点做一次访问。若给定的图是连通图,则从图中人一顶点出发顺着边可以访问到该图的所有顶点。又因为图中任一顶点都可能和其余顶点相邻接,故在访问了某个顶点之后,可能顺着某条路又反回到了该顶点。为避免重复访问同顶点,必须记住每个顶点是否被访问过。为此,我们已经在前面设置了向量int visited[vexnum]={0}来标示,他的初始值为0。 3.4.1 连通图的深度优先搜索遍历 int visited_lj[20]={0};
void DFSL(topnode gl[],int i)/*邻接表的深度遍历*/ {
edgenode *p;
printf("%c",gl[i].topvex); visited_lj[i]=1; p=gl[i].link; while(p!=NULL)
{
if(visited_lj[p->adjvex]==0) DFSL(gl,p->adjvex); p=p->next; } }
int visited[20]={0};
3.4.2 有向图的广度优先搜索遍历 int visited_ljb[20]={0};
void BFSL(topnode gl[],int k)/*邻接表的广度遍历*/ {
int i; edgenode *p; linkqueue Q; setnull(&Q);
printf("%c",gl[k].topvex); visited_ljb[k]=1; enqueue(&Q,k); while(!empty(&Q)) {
i=dequeue(&Q); p=gl[i].link; while(p!=NULL) {
if(!visited_ljb[p->adjvex]) {
printf("%c",gl[p->adjvex].topvex); visited_ljb[p->adjvex]=1; enqueue(&Q,p->adjvex); }
p=p->next; } } }
int visited_jz[20]={0}; 3.5 流程图
3.5.1
3.5.2 无向图邻接表的流程图
数据结构(c 语言版)课程设计报告
输出建立后邻接表
输入深度遍历起 始位置
P!=NULL
否
是 Visited-lj[p->adjvex==0] 否
是
输出遍历结果
输出建立后邻接表
输入广度遍历起 始位置
!empty(&Q)
否
是 P!=NULL 否
是 !visited-ljb[p->adjvex]
8
8
3.5.3 有向图邻接表的流程图
数据结构(c 语言版)课程设计报告
否
Visited-lj[p->adjvex==0] 是
否
是
输出遍历结果
输出建立后邻接表
输入广度遍历起 始位置
否 !empty(&Q)
是 否 P!=NULL
是
!visited-ljb[p->adjvex]
否
是
输出遍历结果
结束
10
10
第四章 测试分析
运行环境:Microsoft Visual C++ 程序语言:C语言
下面,我们来检验一下程序能否正确运行。 4.1 无向图
顶点信息
序号 元素
0 a 1 b 2
c
3
4.1.1 主程序main()编写如下:
void main()
{
int i=1,j,n,e; int k=1,m=1,l=1,t=1; graph ga; topnode *gl;
printf("\t\t\t邻接表表示图及深广度优先遍历\n"); while(i) {
printf("\n1:无向图\n2:有向图\n"); scanf("%d",&i); switch(i) {
case 1://无向图的基本运算 while(k)
{
printf("\n1:无向图邻接表的建立\n2:无向图邻接表的
输出\n3:无向图邻接表的深度遍历\n4:无向图邻接表的广度遍历\n"); scanf("%d",&k);
switch(k) {
case 1:printf("请输入顶点数和边数:"); scanf("%d%d",&n,&e); creat_ljb(&gl,n,e); break;
case 2:print_ljb(&gl,n); break;
scanf("%d",&k); } break;
case 2://有向图的基本运算 while(l) {
printf("\n1:有向图邻接表的建立\n2:有向图邻接表
的输出\n3:有向图邻接表的深度遍历\n4:有向图邻接表的广度遍历\n"); scanf("%d",&l);
case 3:printf("请输入要遍历的起始位置:"); scanf("%d",&j);
printf("邻接表深度遍历后的结果为:") break;
case 4:printf("请输入要遍历的起始位置:"); scanf("%d",&j);
printf("邻接表广度遍历后的结果为:"); BFSL(&gl,j); break;
printf("\n0:结束\n1:继续\n");
DFSL(&gl,j);
}
switch(l)
case 1:printf("请输入顶点数和边数:");
{
为:");
scanf("%d%d",&n,&e);
creat_yljb(&gl,n,e);
case 2:print_ljb(&gl,n);
break;
break;
case 3:printf("请输入要遍历的起始位置:"); scanf("%d",&l);
printf("邻接表深度遍历后的结果为:"); DFSL(&gl,l);
break;
case 4:printf("请输入要遍历的起始位置:"); scanf("%d",&l);
printf("邻接表广度遍历后的结果
BFSL(&gl,l);
break;
}
printf("\n0:结束\n1:继续\n"); scanf("%d",&l);
} break;
}
printf("\n0:结束无向图的运算1:继续无向图的运算\n"); scanf("%d",&i); } }
4.1.2 运行步骤
1 无向图邻接表建立与输出
2 广度与深度遍历
4.2 有向图
2
3
顶点信息
序号 元素 0 1 2 3
a b c d
其主函数于无向图相图 运行步骤
1 有向图的建立与输出
2有向图邻接表的深度与广度遍历
第五章 心得体会
数据结构交给我们了许多关于电脑的知识,开阔了我们的视野,让我们更加喜爱计算机,同时教给我们许多不足,让我们充分了解了计算机的乐趣及其重要性,本章的学习,让我们了解了许多,也懂得了许多……
第六章、参考文献
1. 徐德民.最新C语言程序设计.电子工业出版社,1992 2. 张国锋.C++语言及其程序设计教程.电子工业出版社,1992 3. 百度文库
正在阅读:
广东省广州市2016学年普通高中毕业班综合测试(一)理综试题(Word)03-29
做一个感恩的员工02-18
2015外研版英语九年级上册知识点总结11-23
校园广播稿400字02-23
中西饮食文化差异02-17
2009年新营业税暂行条例及实施细则介绍 - 图文05-20
精益生产单点教材-车间颜色及划线标准08-13
消防安全责任书范本05-26
各种目标责任书范本03-27
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 邻接
- 遍历
- 数据结构
- 存储
- 课程
- 实验
- 报告
- 设计
- 05第五讲 直线与平面的相对位置
- 电动力学_06电磁场的能量与能流
- 《成本会计》简答题
- 《中国近现代史纲要》感想
- 法学实习报告6000字(实用版)
- 电工国家职业标准
- 职高2012年安保突发事件应急预案
- 启航黄涛点评2013年考研英语大小作文
- 人力资源实训课程心得
- 污水处理厂方案12.2
- 七年级英语下册课程纲要1
- 学习传统文化,促进企业良性发展——《弟子规》在企业管理中的运用
- 3_氯_1_2_丙二醇的合成工艺优化
- 视频截取软件完美使用教程
- 南京市20072008学年度第一学期期末调研测试卷
- 1.1(随机试验与样本空间)
- 中南大学建设创新型大学经验介绍
- 七年级道德与法治上册第二单元友谊的天空单元综合测试题新人教版
- 读书英雄知识竞赛 第四场
- 2017首经贸会计硕士复试分数线