首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【数据结构与算法】图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )

文章目录 一、图的存储形式 二、图的基本概念 三、图的表示方式 1、邻接矩阵 2、邻接表 四、图的创建 ( 代码示例 ) 一、图的存储形式 ---- 线性表 中的元素 , 有 一个 直接前驱 和 一个...结点之间的边 有方向 ; 节点之间的边有箭头 ; 带权图 : 边 是有 权重 的 , 计算时不仅要计算路径 , 还要考虑路径的权重 ; 三、图的表示方式 ---- 图的表示方式 : 邻接矩阵 : 二维数组...; 邻接表 : 链表 ; 1、邻接矩阵 图 中有 6 个结点 , 0 ~ 5 ; 使用 6x6 的矩阵 表示 图 , 第 i 行 第 j 列 的元素表示 结点 i 和 结点 j 是否连接 ; 默认情况下...有边连接 ; 2、邻接表 邻接矩阵 要 为 n 个顶点 分配 n x n 大小的空间 , 存储结点间的边是否存在 , 这样会造成一定的损失 ; 邻接表 中 , 只存储 存在的 边 , 不存储 不存在的...边 ; 邻接表 底层数据结构 由 数组 + 链表 组成 ; 上图中 , 邻接表 左侧的 0 ~ 5 表示 标号为 0 ~ 5 之间的结点 ; 第一行 0 : 1 -> 2 -> 3 ->4 -> 表示

2.4K20

24张图彻底弄懂九大常见数据结构!

邻接表 在邻接表中,图的每一个顶点都是一个链表的头节点,其后连接着该顶点能够直接达到的相邻顶点。相较于无向图,有向图的情况更为复杂,因此这里采用有向图进行实例分析。 ?...由此看出,在对有向图进行表示时,邻接表只能求出图的出度,而无法求出入度。这个问题很好解决,那就是增加一个表用来存储能够到达某个顶点的相邻顶点。这个表称作逆邻接表。...逆邻接表 逆邻接表与邻接表结构类似,只不过图的顶点链接着能够到达该顶点的相邻顶点。也就是说,邻接表时顺着图中的箭头寻找相邻顶点,而逆邻接表时逆着图中的箭头寻找相邻顶点。 ?...邻接表和逆邻接表的共同使用下,就能够把一个完整的有向图结构进行表示。可以发现,邻接表和逆邻接表实际上有一部分数据时重合的,因此可以将两个表合二为一,从而得到了所谓的十字链表。...具体的操作可能一时间不好弄懂,建议多看几次上图,弄清指针指向的意义,明白正向和逆向邻接表的表示。

63K1717
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【推荐收藏】学习数据结构的框架思维

    用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的空间存储节点指针。 「图」的两种表示方法,邻接表就是链表,邻接矩阵就是二维数组。...二、数据结构的操作,无非遍历 + 访问 遍历 + 访问,再具体一点就是:增删查改。 数据结构种类很多,但它们存在的目的都是在不同的应用场景,尽可能高效地增删查改。试问,除此之外还有其他吗?...child) } N 叉树的遍历又可以扩展为图的遍历,因为,图就是好几 N 叉棵树的结合体。...你说图是可能出现环的?这个很好办,用个布尔数组 visited 做标记就行了,就不贴代码了。...而根据制造工具的工艺不同,石刀又分尖锐的石刀和锯齿状石刀,前者适合打猎,后者适合切割;就像「图」这种数据结构通过不同的实现方法(链表、数组),可以表示为邻接表和邻接矩阵,前者适合处理非稠密图,后者适合处理稠密图

    39030

    学习数据结构的框架思维

    用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的空间存储节点指针。 「图」的两种表示方法,邻接表就是链表,邻接矩阵就是二维数组。...二、数据结构的操作,无非遍历 + 访问 遍历 + 访问,再具体一点就是:增删查改。 数据结构种类很多,但它们存在的目的都是在不同的应用场景,尽可能高效地增删查改。试问,除此之外还有其他吗?...child) } N 叉树的遍历又可以扩展为图的遍历,因为,图就是好几 N 叉棵树的结合体。...你说图是可能出现环的?这个很好办,用个布尔数组 visited 做标记就行了,就不贴代码了。...而根据制造工具的工艺不同,石刀又分尖锐的石刀和锯齿状石刀,前者适合打猎,后者适合切割;就像「图」这种数据结构通过不同的实现方法(链表、数组),可以表示为邻接表和邻接矩阵,前者适合处理非稠密图,后者适合处理稠密图

    89930

    文心一言 VS 讯飞星火 VS chatgpt (298)-- 算法导论22.1 2题

    接下来,我们将使用Go语言编写一个函数,该函数接受一个邻接链表表示的完全二叉树,并返回等价的邻接矩阵表示。...由于这是一个无向图,所以邻接矩阵是对称的,即如果节点i和节点j之间存在边,那么在邻接矩阵中,matrix[i][j]和matrix[j][i]都应该为1。...邻接矩阵是一个二维数组,其中的元素表示两个结点之间是否存在边。在完全二叉树的邻接矩阵中,如果结点i是结点j的父结点,则矩阵的第i行第j列的元素为1,否则为0。...以下是使用Go语言构建这个完全二叉树的邻接矩阵的代码: package main import"fmt" func main(){ // 定义完全二叉树的邻接表 adjList :=[][]...这个矩阵是对称的,因为完全二叉树是无向图。

    8120

    学习数据结构的框架思维

    用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的空间存储节点指针。 「图」的两种表示方法,邻接表就是链表,邻接矩阵就是二维数组。...二、数据结构的操作,无非遍历 + 访问 遍历 + 访问,再具体一点就是:增删查改。 数据结构种类很多,但它们存在的目的都是在不同的应用场景,尽可能高效地增删查改。试问,除此之外还有其他吗?...child) } N 叉树的遍历又可以扩展为图的遍历,因为,图就是好几 N 叉棵树的结合体。...你说图是可能出现环的?这个很好办,用个布尔数组 visited 做标记就行了,就不贴代码了。...而根据制造工具的工艺不同,石刀又分尖锐的石刀和锯齿状石刀,前者适合打猎,后者适合切割;就像「图」这种数据结构通过不同的实现方法(链表、数组),可以表示为邻接表和邻接矩阵,前者适合处理非稠密图,后者适合处理稠密图

    45520

    《大话数据结构》总结第一章 绪论第二章 算法第三章 线性表第四章 栈和队列第五章 字符串第六章 树第七章 图第八章 查找第九章 排序

    一个有向图由若干棵有向树构成生成森林。) 5种图的多重链表存储: 一、邻接矩阵:图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。...设图G有n个顶点,则邻接矩阵是一个n×n的方阵,定义为: 这是一个对称矩阵,有了这个矩阵,我们就可以很容易地知道图中的信息。 1.我们要判定任意两顶点是否有边无边就非常容易了。...二、邻接表 邻接矩阵在处理稀疏图时会浪费存储空间,邻接表是其改进。...三、十字链表 对于有向图,邻接表是有缺陷的。关心了出度问题,想了解入度就必须要遍历整个图才能知道,反之,逆邻接表解决了入度却不了解出度的情况。可以把邻接表和逆邻接表做在一起,成为十字链表。...邻接多重表与邻接表的差别,仅仅是在于同一条边在邻接表中用两个结点表示,而在邻接多重表中只有一个结点。 五、边集数组 边集数组是由两个一维数组构成。

    1.4K51

    数据结构简单要点总结(转)

    当然这是后话,和考试无关了.)...图 图中将每个对象用一个顶点表示,并常用一个序号来标识一个顶点。 其中弧表示单向关系,边表示双向关系,用离散数学中的术语来说,则分别表示为非对称关系和对称关系。...若有向图中仅有一个顶点的入度为0,其余顶点的入度都为1,称此图为有向树,入度为0的顶点为根。 图的存储结构: 1。邻接矩阵表示 对n个顶点的图来说,其邻接矩阵为n*n阶的。...如果将邻接表中各顶点的邻接表变为其前驱顶点即可,从而得到逆邻接表。 用邻接表存储网络时,需要将各条边(弧)的权值作为相应邻接结点中的一个字段。...*/ edgenode *link; /* 边表头指针 */} vexnode; /* 顶点表结点 */vexnode gnode[n]; /* 整个图的构成 */ 建立无向图的邻接表

    37610

    经典数据结构和算法回顾

    再比如,由链表和顺序表还可以构成二叉树堆,它们还可以组合使用构成邻接表,十字链表,邻接多重表等结构用来描述图,等等。...图的一些表示方法(存储结构) 邻接矩阵 对于一个又n个节点的图,邻接矩阵以一个n*n的二维数组a来描述图,对于不同的图,比如,有向图和无向图,带权图和无权图,a[i,j]表示的含义有所不同,但都是描述边的...对于有向图和无向图会有不同的表示。邻接表一般要比领接矩阵更省空间,但它带来了求入度不便等问题。 十字链表 结合使用邻接表与逆邻接表,这种方式只能描述有向图。...邻接多重表 邻接多重表主要,它主要用来表描述无向图,在邻接表或十字链表中,数组元素的指针域指向的链表元素其实代表了边,如果用邻接表来存无向图,会使得一条边对应的两个节点分别位于两条链中,当我需要删除一条边时...所以有了邻接多重表,邻接多重表就是只用一个边界点表示边,但是将它链接到两链表中(对,没有错,一个节点,同时存在于两个链表中) 下面是上面四种描述的代码表示 ? ? ?

    62610

    【数据结构】总结面试最常用的55道填空题

    树是由n个结点所构成的有限集合,当n=0时,称为空树 树的表示法有4种,分别为:文氏图表示法、凹入图表示法、广义表表示法以及树形表示法 结点的度是指结点所拥有子树的数目 二叉树是一种特殊的树,它的每个结点最多只有两颗子树...,并且这两课子树也是二叉树 在一棵二叉树中,若其所有结点或叶结点,或左、右子树都非空,且所有叶结点都在同一层,则称这棵二叉树为满二叉树 在二叉树的第i层上至多有2i个结点(i≥0) 深度为h(h≥0)的二叉树上至多含...,则图中各个极大连通子图称作此图的连通分量 若有向图中任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图 常见的图的存储结构有两种,分别为:邻接矩阵和邻接表 无向图的邻接矩阵是对称的(可采用压缩存储...),顶点vi的度是第i行或第i列中“1”的元素个数 有向图的邻接矩阵不一定为对称矩阵,每行中“1”的个数为该顶点的出度,每列中“1”的个数为该顶点的入度 对于稀疏图,邻接表比邻接矩阵节省存储空间 图的遍历方式通常有两种...克鲁斯卡尔算法的基本思想是,先构造一个只含有n个顶点的子图SG,然后从权值最小的边开始,若它的添加不使SG中产生回路,则在SG上加上这条边,如此重复,直至加上n-1条边为止 最小生成树不是唯一的,因为同一时候可能有多种选择

    48330

    数据结构面试常见问题总结怎么写_前端数据结构与算法面试题

    ,是先进后出 队列:队尾进,队首出,是先进先出 Q:度为 2 的树与二叉树有什么区别 A: 度为 2 的树至少有 3 个结点,而二叉树可以为空 二叉树有左右子树之分 Q:唯一确定一棵二叉树 A:中序 +...为边数 Q:图的存储方式有哪些?...每一种方式优缺点 A:邻接矩阵、邻接表、十字链表、邻接多重表 无向图:邻接矩阵、邻接表、邻接多重表 有向图:邻接矩阵、邻接表、十字链表 邻接矩阵:适合稠密图,确定边数总数花费时间代价大,边较少时造成空间浪费...邻接表:适合稀疏图,节省空间,容易找出邻边,确定两个顶点间是否存在边花费时间代价大 Q:树的存储结构 A:双亲表示法、孩子表示法、孩子兄弟表示法 Q: 图的遍历和树的遍历有哪些 A: 图的遍历:广度优先遍历...A:图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。其次,图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。

    60720

    数据结构面试常见问题总结

    ,是先进后出 队列:队尾进,队首出,是先进先出 Q:度为 2 的树与二叉树有什么区别 A: 度为 2 的树至少有 3 个结点,而二叉树可以为空 二叉树有左右子树之分 Q:唯一确定一棵二叉树 A:中序 +...为边数 Q:图的存储方式有哪些?...每一种方式优缺点 A:邻接矩阵、邻接表、十字链表、邻接多重表 无向图:邻接矩阵、邻接表、邻接多重表 有向图:邻接矩阵、邻接表、十字链表 邻接矩阵:适合稠密图,确定边数总数花费时间代价大,边较少时造成空间浪费...邻接表:适合稀疏图,节省空间,容易找出邻边,确定两个顶点间是否存在边花费时间代价大 Q:树的存储结构 A:双亲表示法、孩子表示法、孩子兄弟表示法 Q: 图的遍历和树的遍历有哪些 A: 图的遍历:广度优先遍历...A:图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。其次,图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。

    95130

    数据结构在游戏中的应用

    本文主要讲述数据结构在游戏中的应用,其中包括对链表、顺序表、栈、队列、二叉树及图的介绍。读者在阅读本文以前,应对数据结构有所了解,并且熟悉C/C++语言的各种功用。好了,现在我们由链表开始吧!...那么以上情节用图的形式表现为(此图为有向图,先后关系在上面表格显示): 现在我们用邻接矩阵表示此有向图,请看下面代码片断: struct MGRAPH   {     int Vexs[MaxVex];...将给出的情节表示成邻接矩阵: 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 图4 我们规定,各个情节之间有先后关系,但没有被玩家发展的,用1表示。...我们也可以用邻接链表来表示这个图,不过,用链表表示会占用更多的内存,邻接链表主要的优点是表示动态的图,在这里并不适合。   ...另外,图的另一个应用是在寻路上,著名的A*算法就是以此数据结构为基础,人工智能,也需要它的基础。

    10310

    数据结构在游戏中的简单应用

    本文主要讲述数据结构在游戏中的应用,其中包括对链表、顺序表、栈、队列、二叉树及图的介绍。读者在阅读本文以前,应对数据结构有所了解,并且熟悉C/C++语言的各种功用。好了,现在我们由链表开始吧!...0,表示此图块不可通过,为1表示能通过。   ...那么以上情节用图的形式表现为(此图为有向图,先后关系在上面表格显示):  现在我们用邻接矩阵表示此有向图,请看下面代码片断: struct MGRAPH { int Vexs[MaxVex]; //顶点信息...我们也可以用邻接链表来表示这个图,不过,用链表表示会占用更多的内存,邻接链表主要的优点是表示动态的图,在这里并不适合。   ...另外,图的另一个应用是在寻路上,著名的A*算法就是以此数据结构为基础,人工智能,也需要它的基础。

    9010

    《大话数据结构》(二)

    2.注意: 图中元素称为顶点(Vertex) 线性表中可以没有元素称为空表,树中可以没有结点叫做空树,图结构中不允许没有顶点 图中任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示 3.各种图定义...一个有向图的生成森林由若干棵有向树组成,含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧 B.图的存储结构 1.邻接矩阵:图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图...图中顶点用一个一维数组存储,每个数据元素还要存储指向第一个邻接点的指针 图中每个顶点vi的所有邻接点构成一个线性表,使用单链表存储,无向图称为顶点vi的边表,有向图则称为顶点vi作为弧尾的出边表 对于有向图...,可以建立一个有向图的逆邻接表,即对每个顶点vi都建立一个链接为vi为弧头的表 对于带权值的网图,可以在边界结点定义中再增加一个weight的数据域,存储仅值信息 3.十字链表:将邻接表和逆邻接表结合在一起使用...,在有向图的应用中,是非常好的数据结构模型 4.邻接多重表:与邻接表的差别,仅仅是在于同一条边在邻接表中用两个结点表示 5.边靠数组:由两个一维数组构成。

    1K31

    dfs、bfs的终于弄明白了

    邻接矩阵和邻接表 dfs和bfs一般用于处理图论的问题,那么在看问题之前首先要关注图的存储问题,正常一般用邻接矩阵或者邻接表存储图(对于十字链表、压缩矩阵之类空间优化这里不进行讨论)。...邻接矩阵: 邻接矩阵就是用数组(二维)表示图,通常这种图我们会对各个节点顺序的编号,在矩阵内数值表示图的联通情况或者路径长度。...如果是无权图:那么一般用boolean数组的01表示联通性,如果是有权图那么数组的值就用来表示两者路径长度,如果为0那么就表示不通。...二叉树的前序遍历就是一个最简单的dfs遍历。 我们通常使用邻接表或者邻接矩阵储存图的信息,这里例子使用邻接矩阵完成!...在实现上朴素的bfs就是控制一个队列,后进先出进行层序遍历,但很多时候可能有场景需求节点有权值可能就需要使用优先队列。 就拿上述的图来说,我们使用邻接表来实现一个bfs遍历。

    1.2K40

    数据结构与算法-面试

    不稳定的排序算法 直接选择排序 希尔排序(依次选择排序的增量为长度的1/2,1/4,...直到增量为1),每次选择增量之后进行插入排序,但是不同的增量阶段可能导致相同大小的相对位置发生变化,所以是不稳定的...排序算法稳定,时间复杂度都为 O(nlogn),空间复杂度为 O(n)。 简述图 图是由顶点集合和顶点之间的边集合组成的一种数据结构,分为有向图和无向图。...有向图:边具有方向性 无向图:边不具有方向性 简述邻接矩阵 用一个二维数组存放图顶点间关系的数据,这个二维数组称为邻接矩阵。...对于无向图,邻接矩阵是对称矩阵 简述邻接表 邻接表是通过链表表示图连接关系的一种方。对于表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。...简述图的深度优先搜索DFS 将图中每个顶点的访问标志设为 FALSE, 之后搜索图中每个顶点,如果未被访问,则以该顶点V0为起始点出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图

    63530

    【地铁上的面试题】--基础部分--数据结构与算法--树和图

    对于包含 N 个节点的图,邻接矩阵是一个 N×N 的矩阵。矩阵中的元素表示节点之间的连接关系,如果两个节点之间存在边,则对应位置的元素为 1 或边的权重值,否则为 0 或者其他特定的表示。...邻接矩阵适用于稠密图,其中边的数量相对节点的数量较多。 邻接表(Adjacency List): 邻接表是一种使用链表或数组的列表来表示图的方式。对于每个节点,维护一个与之相邻节点的列表。...这可以通过数组或链表的形式实现,其中每个元素表示一个节点,对应的值是一个列表,列出与该节点相邻的节点。邻接表适用于稀疏图,其中边的数量相对节点的数量较少。...通过创建一个邻接表来表示图的连接关系,并使用一个visited数组来标记节点是否已被访问。...通过创建一个邻接表来表示图的连接关系,并使用一个visited数组和队列来辅助遍历。

    51290

    【C++】常用数据结构纲要(简易版)

    如果想要了解更多,或者说之前学过,但是现在忘记了的话,可以看看作者之前写的关于树结构的文章。 这是一个入门级的关于树的文章。 这是一个扩展关于二叉树的文章。 这是一个优化二叉树缺点的文章一。...如果不一样,那就说明其中肯定是存在文件的错误或者遗漏。 5、图 5、1、概念和图示 图的形式有很多种。图的表示方式为G(V,E),其中G表示的就是整个的图的结构,V表示的是节点,E表示的是边。...5、2、图的实现方式 如果想要实现一个简单的图的话,我们可以通过二维数组来构建。此时这个数组又称为邻接矩阵。 这样的二维数组就能够表示举出示例的那个图的形式。...除此之外,我们还能够使用链表来存储图,使用链表的表示方法被称为图的邻接表。...这两种方式表示的图会稍微有点不同,当图为稠密图的时候,我们使用邻接矩阵来表示,图为稀疏图的时候用邻接表来表示。

    10610
    领券