ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:117.34KB ,
资源ID:10961088      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10961088.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验3报告doc.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验3报告doc.docx

1、数据结构实验3报告doc任课教师:孙树森数据结构与算法(2012-2013学年第2学期)实验报告学号:2011329700214姓名:周咪咪 班级:11数字媒体技术(2)班实验3 图的建立与操作一、实验目的和要求在熟悉图的存储、遍历、及其应用的基础上,通过键盘输入数据,建立一个无向图的邻接表,输出该邻接表,并计算每个顶点的度。达到巩固图的存储思想及其存储实现。二、实验内容完成下图的邻接表表示,并计算每个顶点的度。附加要求:进行深度优先和广度优先遍历3、程序源码#include#include#includeusing namespace std;/-无向图的邻接存储表示-#define MAX

2、_VERTEX_NUM 8 /顶点最大个数 int arcMAX_VERTEX_NUMMAX_VERTEX_NUM;/数组用于存储边信息bool visitedMAX_VERTEX_NUM;typedef struct ArcNode/边表结点 int adjvex; /邻接点域,存储该顶点对应的下标 struct ArcNode *next;/链域,指向下一个邻接点 int weight; /存储边的权值ArcNode; #define VertexType char /顶点元素类型typedef struct VNode/顶点表结构 int degree;/顶点的度 VertexType

3、data;/顶点域,存储顶点信息 ArcNode *firstarc;/边表头指针VNode/*头结点*/,AdjListMAX_VERTEX_NUM; typedef struct AdjList vertices;/顶点 int numNodes,numEdges;/当前顶点数,边数ALGraph;typedef struct int *elem; int front, rear; Queue;void InitQueue(Queue &Q) Q.elem = new intMAX_VERTEX_NUM; Q.front = Q.rear = 0;int QueueEmpty(Queue

4、Q) if(Q.front=Q.rear) return 0; else return 1; void EnQueue(Queue &Q, int e) if(Q.rear + 1)%MAX_VERTEX_NUM != Q.front) Q.elemQ.rear = e; else printf(队列满!n); Q.rear = (Q.rear + 1)%MAX_VERTEX_NUM; void DeQueue(Queue &Q, int &e) if(Q.rear != Q.front) e = Q.elemQ.front; else printf(队列空!n); Q.front = (Q.

5、front+1)%MAX_VERTEX_NUM;/-建立无向图-void CrateALGraph(ALGraph *G)int i,j,k;/ArcNode *e;printf(输入顶点数和边数:n);scanf(%d,%d,&G-numNodes,&G-numEdges);for(i=0;inumNodes;i+)/读入顶点信息,建立顶点表printf(输入顶点信息:n);cinG-verticesi.data;G-verticesi.firstarc=NULL;/将边表置为空表visitedi=false;for(k=0;knumEdges;k+)/建立边表printf(输入边(vi,v

6、j)上的顶点序列:n);scanf(%d,%d,&i,&j); /输入边(vi,vj)上的顶点序号arcij=1;/两个顶点之间有边记作1ArcNode *s1,*s2;s1=(ArcNode *)malloc(sizeof(ArcNode);/向内存申请空间,生成边表结点s1-adjvex=j;/邻节序号为js1-next=G-verticesi.firstarc;/将e的指针指向当前顶点上指向的结点G-verticesi.firstarc=s1;/将当前顶点的指针指向es2=(ArcNode *)malloc(sizeof(ArcNode);/向内存申请空间,生成边表结点s2-adjvex

7、=j;/邻节序号为is2-next=G-verticesi.firstarc;/将e的指针指向当前顶点上指向的结点G-verticesi.firstarc=s2;/将当前顶点的指针指向e/-输出邻接表-void display(ALGraph *G)ArcNode *p;printf(邻接表如下:n); for(int i=0;inumNodes;i+) printf(%d),%c:,i,G-verticesi.data);/输入下标和对应顶点的信息 p=G-verticesi.firstarc; while (p!=NULL) /输出相关顶点 printf(-%c,p-adjvex); p=

8、p-next; printf(n); /-计算无向图的度-void DegreeNum(ALGraph *G)/与顶点相关的度 int i,j; int degreenum; for(j=1;jnumNodes;j+) degreenum=0; for(i=0;inumNodes;i+) if(arcji=1|arcij=1)/v,i有边相连 degreenum+; printf(与顶点%c度为:%dn,G-verticesi.data,degreenum); /-深度优先搜索遍历-void DFS(ALGraph G,int i) ArcNode *p; visitedi=true; pri

9、ntf(%c,G.verticesi.data); p=G.verticesi.firstarc;while(p)if(!visitedp-adjvex)DFS(G,p-adjvex);/对为访问的邻接顶点递归调用p=p-next;/-广度优先搜索-void BFS(ALGraph G)int i;ArcNode *p;Queue Q;InitQueue(Q);for(i=0;iadjvex)/若此顶点为被访问visitedp-adjvex=true;printf(%c,G.verticesp-adjvex.data);EnQueue(Q,p-adjvex);p=p-next;printf(n

10、);int main() ALGraph G; int i;/ G=(ALGraph *)malloc(sizeof(ALGraph); CrateALGraph(&G);/创建无向图,输入数据 printf(输出每个顶点的度:n); /for(int m=0;iG.numNodes;i+) DegreeNum(&G); printf(深度优先搜索遍历:n); DFS(G,0);for(i=0;iG.numNodes;i+)visitedi=false; printf(n); printf(广度优先搜索遍历:n); BFS(G); printf(输入邻接表:n); display(&G); i

11、nt c;scanf(%d,&c);return 0;4、运行结果与测试分析运行结果:(1)输入顶点信息:(2)输入边信息:(3)输出每个顶点度:(4)邻接表分析:(1)首先定义无向图邻接表的结构,分别声明边表结点、顶点结构、当前图的顶点和边数的结构。(2)建立无向图的邻接存储结构,通过CrateALGraph函数在内部实现顶点数据的输入,边表的置空和建立,构建顶点之间的边结构。(3)定义display函数实现邻接表的输出。通过结点指针实现当前顶点信息的索引和向下索引相关联的顶点。(4)通过DegreeNum函数实现对应顶点的度,在函数中通过在for循环语句中的if语句判断这两个顶点是否有度,

12、实现所以顶点度的查找。(5)再根据书上深度优先索引遍历和广度优先遍历的代码实现遍历。(6)在main函数中通过定义一个图输入顶点信息和边的数量。再调用各种函数实现题目需要的效果。五、实验心得与体会在这次试验中,需要之前了解无向图的基本概念。通过实验知道了图的建立、存储方式和图的遍历。在实验之前,因为对图的概念不是很了解,所以在看到实验时有些迷茫。后来在查阅了课本和请教了同学后,开始了程序的编写。实验过程中,在图的遍历的理解上有一定的混淆导致错误连连,后来通过在网上查找相应的错误解决方案和同学商讨后完成了程序的编写。在此次实验中,了解到了有向图和无向图在顶点度的计算时的区别,在深度优先搜索遍历和广度优先搜索遍历的可以利用递归调用的方法简化程序,在广度优先搜索遍历时需要定义大量函数实现遍历。通过此次学习,希望可以对以后的实验和学习会有很大的帮助。

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

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