读数据结构与算法分析

坑!待填!

若干定义

  • 一个图G = (V , E)由顶点集V和边集E组成,每条边就是一个点对


  • 如果点对是有序的,那么就叫做有向图


  • 边可能还具有第三种成分,权值


  • 无向图种从每个顶点到其他每个顶点都存在至少一天路径,则称为图是连通的。具有这样性质的有向图称为强连通,如果不是强连通的,但它的基础图是连通的,则称为弱连通

图的表示

领接矩阵

- 使用一个二维数组表示
- 对于每条边(u,v),置A[u][v] = 1;

邻接表

- 用一个表来储存这个顶点的所有邻接点
- 使用一个数组保存头单元
- 每个头单元连接着所有顶点

拓扑排序

对有向无圈的顶点的一种排序,使得如果存在从vi到vj,那么在排序中vj必须出现在vi后面

实现

简单实现

  1. 从有向图中选取一个没有前驱(入度为0)的顶点,并输出之;
  2. 从有向图中删去此顶点以及所有以它为尾的弧(弧头顶点的入度减1);
  3. 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。

类型声明

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语言实现)的更多相关文章

  1. 图的存储结构大赏------数据结构C语言(图)

    图的存储结构大赏------数据结构C语言(图) 本次所讲的是常有的四种结构: 邻接矩阵 邻接表 十字链表 邻接多重表 邻接矩阵 概念 两个数组,一个表示顶点的信息,一个用来表示关联的关系. 如果是无 ...

  2. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  3. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  4. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  5. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  6. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  7. 数据结构(C语言)—排序

    数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...

  8. 【图数据结构的遍历】java实现广度优先和深度优先遍历

    [图数据结构的遍历]java实现广度优先和深度优先遍历 宽度优先搜索(BFS)遍历图需要使用队列queue数据结构: 深度优先搜索(DFS, Depth First Search)的实现 需要使用到栈 ...

  9. Python语言数据结构和语言结构(2)

    目录 1. Python预备基础 2. Python数据类型 3. Python条件语句 4. while循环和for循环 1. Python预备基础 1.1 变量的命名   变量命名规则主要有以下几 ...

  10. 一幅图解决R语言绘制图例的各种问题

    一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...

随机推荐

  1. CSS3 - 新单位vw、vh、vmin、vmax使用详解(附样例)

    像 px.em 这样的长度单位大家肯定都很熟悉,前者为绝对单位,后者为相对单位.CSS3 又引入了新单位:vw.vh.vmin.vmax.下面对它们做个详细介绍. 一.基本说明 1,vw.vh.vmi ...

  2. python -- MySQLdb连接mysql数据库

    1. python安装mysql $ pip install mysql-python 2. 数据库连接程序: import MySQLdb # 打开数据库连接db = MySQLdb.connect ...

  3. Vue学习—组件的学习

    1.什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能 ...

  4. Oracle 11g R2 RAC with ASM存储迁移--Rman copy&ASM Rebalance(一)

    ASM GROUP-Rman copy迁移 0x00--环境介绍 VMware版本:VMware12pro 主机操作系统:RHEL6.5_64 共享存储使用VMWARE创建共享磁盘文件 数据库版本:O ...

  5. 【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库

    编译 Luajit 库,的确是一个挑战.因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了.以前只是编译了适用于真机的 Luajit 库.最近在尝试编译模拟器 Luajit 库 ...

  6. TopJUI Combobox 联动

    这里给联动进行一个简单定义:因Combobox选择或输入的值发生改变时对自身或者其它组件产生影响称为联动.(注:editable确定是否可以手动输入) 有两种实现方法: 一.自己写对应的onChang ...

  7. sql for xml path 处理

    1.将下列结果集 做成 aa   语文,数学 bb    英语,语文 这种格式 使用 for xml  path  记得去重复 WITH cte AS(SELECT stu.studentname,c ...

  8. AttributeError: module 'tensorflow' has no attribute 'enable_eager_execution'

    Traceback (most recent call last): File "linear_regression_eager_api.py", line 15, in < ...

  9. spring data elasticsearch 使用

    很久之前就安装了elasticsearch,一直没用java用过,最近看了一下spring data系列的elasticsearch,这里写一篇心得. 如果尚未安装elasticsearch,可以 参 ...

  10. iOS开发者证书-详解/生成/使用

    本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密. 对称密钥加密 对称密钥加密(Sy ...