免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
福州大学数计学院数据结构上机实验报告专业和班级:信息计算科学与应用数学6班学号姓名成绩实验名称图的有关操作实验内容有向图的邻接表的建立及遍历实验目的和要求【实验目的】 掌握图的存储思想及其存储实现。 掌握图的深度、广度优先遍历算法思想及其程序实现。掌握图的常见应用算法的思想及其程序实现。问题描述和主要步骤【实验内容】1. 键盘输入数据,建立一个有向图的邻接表。2在有向图的邻接表的基础上计算各顶点的度。3采用邻接表存储实现有向图的深度优先遍历。4采用邻接表存储实现有向图的广度优先遍历。【主要程序】#include#include#include#define MAX_VERTEX_NUM 20#define OK 1#define ERROR 0#define OVERFLOW 0int visitedMAX_VERTEX_NUM;typedef struct ArcNode/表结点int adjvex;/该弧所指向的顶点的位置struct ArcNode *nextarc;/指向下一条弧的指针char *info;/该弧相关信息的指针ArcNode;typedef struct VNode/头结点char data;/顶点信息ArcNode *firstarc;/第一个表结点的地址,指向第一条依附顶点的弧的指针VNode,AdjListMAX_VERTEX_NUM; /头结点,头结点的顺序表AdjList类型typedef struct /图结构AdjList vertices;int vexnum,arcnum;/图的当前顶点数与弧数ALGraph;typedef struct QNode/用于BFS遍历的附设链队列结点结构int data;struct QNode *next;QNode,*QueuePtr;typedef struct/链队列QueuePtr front;QueuePtr rear;LinkQueue;int InitQueue(LinkQueue &Q)/初始化链队Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front) exit(OVERFLOW);Q.front-next=NULL;return OK;int EnQueue(LinkQueue &Q,int e)/元素e入队QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p) exit(OVERFLOW);p-next=NULL;p-data=e;Q.rear-next=p;Q.rear=p;return OK;int DeQueue(LinkQueue &Q,int &e)/队首元素出队,由e返回其值QueuePtr p;if(Q.front=Q.rear) exit(OVERFLOW);p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear=p)Q.rear=Q.front;free(p);returnOK;int EmptyQueue(LinkQueue Q)/判断队列Q是否为空if(Q.front=Q.rear)return 1;return 0;int LocateVex(ALGraph G,char v)/查找值为v的顶点在顶点向量G.vexs中的位置int i;for(i=0;iadjvex;elsereturn -1;int NextAdjVex(ALGraph G,char v,char w)/返回v的(相对于w)的下一个邻接顶点的序号int i,j;ArcNode *p,*q;i=LocateVex(G,v);j=LocateVex(G,w);if(i=-1|j=-1|i=j)return -1;p=G.verticesi.firstarc; /p指向v的邻接顶点链表中的第一个邻接顶点while(p-nextarc&p-adjvex!=j)/找到邻接顶点wp=p-nextarc;if(p-nextarc)/找到邻接顶点w,且w非v的最后一个邻接顶点q=p-nextarc;return q-adjvex;/返回v的(相对于w)的下一个邻接顶点的序号else return -1;/没有找到w或w是v的最后一个邻接顶点int Visit(char v)printf(%c ,v);return OK;int CreateDG(ALGraph &G)/采用邻接表表示,构造有向图Gint v,e,i,j,t;ArcNode *p,*q;char tail,head;printf(输入顶点个数:);scanf(%d,&v);if(v0)return ERROR;G.vexnum=v;printf(输入弧的条数:);scanf(%d,&e);if(e0)returnERROR;G.arcnum=e;printf(建立DG:n);for(t=0;tG.vexnum;t+)/建立头结点顺序表fflush(stdin);printf(输入%d的信息:,t+1);scanf(%c,&G.verticest.data);G.verticest.firstarc=NULL;/初始化该头结点指针域for(t=0;tadjvex=j;p-info=NULL;p-nextarc=NULL;if(!G.verticesi.firstarc)G.verticesi.firstarc=p;else/找尾结点for(q=G.verticesi.firstarc;q-nextarc;q=q-nextarc);q-nextarc=p;/插入到链表尾int DFS(ALGraph G,int v)/从第v个顶点出发,递归的深度优先遍历有向图Gint w;visitedv=-1;printf(%c ,G.verticesv.data);w=FirstAdjVex(G,G.verticesv.data);for(;w=0;w=NextAdjVex(G,G.verticesv.data,G.verticesw.data)if(!visitedw)DFS(G,w);/对v的尚未访问的邻接顶点w递归调用DFS()return OK;int DFSTraverse(ALGraph G) /深度优先搜索遍历图Gint i;for(i=0;iG.vexnum;i+)visitedi=0;for(i=0;iG.vexnum;i+)if(!visitedi)DFS(G,i);return OK;int BFSTraverse(ALGraph G,int(*visit)(char v)LinkQueue Q;int v,w,u;for(v=0;vG.vexnum;v+)visitedv=0;InitQueue(Q);for(v=0;v0;w=NextAdjVex(G,G.verticesu.data,G.verticesw.data)if(!visitedw)visitedw=1;Visit(G.verticesw.data);EnQueue(Q,w);retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年部编人教版四年级数学下册期中总复习及答案
- 2023年快中子增殖堆及配套产品项目评价分析报告
- 精细药液过滤器项目综合评估报告
- 《混凝土结构设计原理(新形态活页式)》 课件 19.螺旋箍筋柱正截面承载力计算习题
- (部编)人教语文2011课标版一年级下册小学一年级语文下册《文具的家》教学设计
- 安徽省合肥市2023年高考英语必刷试卷含解析
- ++-HW-伴有脑肿胀的大脑和小脑梗死的管理意见
- 逆变式电焊机项目可行性分析报告
- 财产赠与合同
- 校园安防监控方案(2篇)
- GB 29449-2024轮胎和炭黑单位产品能源消耗限额
- 数智时代的商业变革智慧树知到期末考试答案2024年
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 庆祝新中国成立 75 周年中小学主题教育班会课件
- 2024年山东潍坊港华燃气有限公司招聘笔试参考题库含答案解析
- 新员工试用期跟踪记录表(入职一个月)
- 国开安徽广播电视大学学前教育学-学前教育概论形成性考核五(权重20)0答案
- 公称压力(MPa)管道壁厚对照表
- 吊带钢丝绳使用规范
- 初中英语学习重要性
- 《其它辩证方法》PPT课件.ppt
评论
0/150
提交评论