图 -数据结构(C语言实现)
读数据结构与算法分析
坑!待填!
若干定义
- 一个图G = (V , E)由顶点集V和边集E组成,每条边就是一个点对
- 如果点对是有序的,那么就叫做有向图
- 边可能还具有第三种成分,权值
- 无向图种从每个顶点到其他每个顶点都存在至少一天路径,则称为图是连通的。具有这样性质的有向图称为强连通,如果不是强连通的,但它的基础图是连通的,则称为弱连通
图的表示
领接矩阵
- 使用一个二维数组表示
- 对于每条边(u,v),置A[u][v] = 1;
邻接表
- 用一个表来储存这个顶点的所有邻接点
- 使用一个数组保存头单元
- 每个头单元连接着所有顶点
拓扑排序
对有向无圈的顶点的一种排序,使得如果存在从vi到vj,那么在排序中vj必须出现在vi后面
实现
简单实现
- 从有向图中选取一个没有前驱(入度为0)的顶点,并输出之;
- 从有向图中删去此顶点以及所有以它为尾的弧(弧头顶点的入度减1);
- 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。
类型声明
typedef char VertexType ;
typedef struct OutNode *Degree ;
typedef struct GVertex *Vertex ;
struct OutNode
{
VertexType Date ;
Degree Next ;
}
struct GVertex
{
int in ;
VertexType Date ;
Degree First ;
}
主函数
int Getin(Vertex G)
{
int len = 0;
while((G++)->Data != '/0')
len ++ ;
return len ;
}
void TopSort(Vertex G)
{
int i,j,k ;
Degree P;
int VertexNum ;
VertexNum = Getin(G) ;
for(i = 0; i < VertexNum; i++)
for(j = 0;j < VertexNum; j++)
if(G[j].in === 0)
{
printf("%c ", G[j].data);
G[j].in = -1;
P = G[j].first ;
while(P != NULL)
{
for( k=0; k<VertexNum; k++ )
if( P->data == G[k].data ) {
G[k].in--;
break;
}
P = P->next;
}
break ;
}
}
无权单源最短路算法
基本思路:按照BFS的思路搜索图,并记下路径长
void Unweihted(Table T)
{
int CurrDist ;
Vertex V, W ;
for(Currist = 0; Currist < NumVertex; Currist++)
for each vertex V
if(!T[v].Known && T[v].Dist == Currist)
{
T[v].Known = True ;
for each W adjacent to V
if(T[W].Dist == Infinity)
{
T[W].Dist = CurrDist + 1 ;
T[W].Path = V ;
}
}
}
更高效率的
void Unweighted(Table T)
{
Queue Q ;
Vertex V, W ;
Q = CreateQueue(NumVertex) ;
MakeEmpty(Q) ;
while(!IsEmpty(Q))
{
V = Dequeue(Q) ;
T[V].Known = True ;
for each W adjacent to V
if(T[W].Dist == Infinity)
{
T[W].Dist == T[W].Dist + 1;
T[W].Path = V ;
Enqueue(W,Q) ;
}
}
DisposeQueue(Q) ;
}
DFS深度优先搜索模板
void dfs(Vertex V)
{
Visited[V] = True ;
for each W adjacent to V
if(!Visted[W])
dfs(W) ;
}
``
图 -数据结构(C语言实现)的更多相关文章
- 图的存储结构大赏------数据结构C语言(图)
图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 数据结构(C语言)—排序
数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...
- 【图数据结构的遍历】java实现广度优先和深度优先遍历
[图数据结构的遍历]java实现广度优先和深度优先遍历 宽度优先搜索(BFS)遍历图需要使用队列queue数据结构: 深度优先搜索(DFS, Depth First Search)的实现 需要使用到栈 ...
- Python语言数据结构和语言结构(2)
目录 1. Python预备基础 2. Python数据类型 3. Python条件语句 4. while循环和for循环 1. Python预备基础 1.1 变量的命名 变量命名规则主要有以下几 ...
- 一幅图解决R语言绘制图例的各种问题
一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...
随机推荐
- 日志采集框架Flume
前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集.结果数据导出.任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中 ...
- webapi文件上传和下载
文件上传我们可以做上传文件保存到图片与导入数据,下载可以下载多样的文件. 上传:实例是单个文件导入 NopiHelper:地址 ①简单的上传图片进行保存,方法跟MVC中的一样 <form nam ...
- linux 命令 uniq
linux命令uniq去重 实例详细说明linux下去除重复行命令uniq 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉 ...
- npm run build 时报错operation not permitted
1.项目使用vue框架,在npm run build 打包时报错: 访问对应的目录,发现无法打开,原来是文件被其他应用程序占用了,仔细看了一下,xftp文件传输的软件打开着,把它关闭以后,重新运行np ...
- vue-cli 3.0 豆瓣api接口使用element做分页
记录自己的学习 大佬绕道谢谢! 豆瓣即将上映接口:https://api.douban.com/v2/movie/coming_soon 本地跨域问题 看我之前的文章:https://www.cnbl ...
- 文库网站建设,文库网站PHP代码,TP开发文库网
专业定制仿百度文库网站系统,文库网站系统源码,文库网站建设开发,支持电脑版+手机版+微信版+小程序版+APP版,由10年的技术团队专业定制,需要的朋友可以联系我们.网站采用:PHP+MySQL+t ...
- linux环境mysql的安装主从关系的配置
- 20155204 2016-2017-2《Java程序设计》课程总结
20155204 2016-2017-2<Java程序设计>课程总结 目录 作业链接汇总 作业总结 实验报告链接汇总 代码托管链接 课堂项目实践 学习经验 问卷调查 链接二维码 (按顺序) ...
- 20155218 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155218 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 实验结果截图: (二)使用IDEA编辑.编 ...
- 20145207李祉昂《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验
1.0 实践内容 Return-to-libc攻击是一种特殊的缓冲区溢出攻击,通常用于攻击有“栈不可执行”保护措施的目标系统.本实验中我们放弃了让漏洞程序执行堆栈中的shellcode,将用syste ...