图数据结构综述.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图数据结构综述

数据结构实验报告 班级:i got 7 姓名:鸟宝宝 实验内容:图遍历的演示 以邻接表为储存结构,实现图的深度优先和广度优先遍历,输出各种遍历下的节点访问序列。 设计过程: 为了实现对图的深度优先搜索和广度优先搜索,首先是数据类型定义,然后是选取存储结构,最后是在此基础上以不同的方式进行操作,得以实现。 ADT?Queue{ 数据对象:D={ai | ai∈ElemSet, i=1,2,...,n, n≥0} 数据关系:R1={a?i-1,ai|ai-1,ai∈D,i=2,...,n} 约定其中a1端为队列头,an端为队列尾? 基本操作:? enqueue(q,?e)?? 初始条件:队列q已存在。? 操作结果:插入元素e为q的新的队尾元素。? dequeue(q)? 初始条件:q为非空队列。 操作结果:删除q的队头元素,并返回。 }ADT?Queue? 定义图的节点,图的顶点数组,遍历标记的数组 struct node /* 图顶点结构定义 */ { int vertex; /* 顶点数据信息 */ struct node *nextnode; /* 指下一顶点的指标 */ }; typedef struct node *graph; /* 图的结构新型态 */ struct node head[9]; /* 图顶点数组 */ int visited[9]; /* 遍历标记数组 */ 建立确定图的存储结构邻接表 void creategraph(int node[20][2],int num) { //二维数组向邻接表的转化 /*num指的是图的边数*/ graph newnode; // 顶点指针 graph ptr; int from; //边起点 int to; // 边终点 int i; for ( i = 0; i num; i++ ) { from = node[i][0]; // 边的起点 to = node[i][1]; // 边的终点 newnode = ( graph ) malloc(sizeof(struct node)); // 建立新顶点 newnode-vertex = to; // 顶点内容 newnode-nextnode = NULL; ptr = (head[from]); // 顶点位置 while ( ptr-nextnode != NULL ) ptr = ptr-nextnode; ptr-nextnode = newnode; } } void dfs(int current) { //图的深度优先搜索 graph ptr; visited[current] = 1; /* 记录已遍历过 */ printf( %d\n,current); /* 输出遍历顶点值 */ ptr = head[current].nextnode; /* 顶点位置 */ while ( ptr != NULL ) /* 遍历至链表尾 */ { if ( visited[ptr-vertex] == 0 ) /* 如过没遍历过 */ dfs(ptr-vertex); /* 递回遍历呼叫 */ ptr = ptr-nextnode; /* 下一个顶点 */ } } int enqueue(int value) { //数值入队列 if ( rear = MAXQUEUE ) /* 检查队列是否全满 */ return -1; /* 无法

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档