首页
学习
活动
专区
圈层
工具
发布

图的遍历(下)——邻接表

概述 在我的上一篇博客:图的遍历(上)——邻接矩阵 中主要介绍了邻接矩阵的BFS和递归的DFS与非递归的DFS这3种遍历算法。在这篇博客我将主要叙述邻接表的以上3中遍历算法。...首先来看看邻接表的表示方法。 邻接表主要是针对稀疏图中邻接矩阵造成的空间浪费而提出的。下面我们来看看邻接表的表示。 1)无向图的表示 ? 2)有向图 ?...(说明:对于BFS,DFS的递归与非递归算法在这篇文章就不再重复,如有不了解请移步我的上一篇博客:图的遍历(上)——邻接矩阵 ) ---- 广度优先遍历(BFS) //广度优先遍历(BFS) void...return this->next; } }; class Graph{ private: vector Edgelist; //邻接表...{ cout<<"请输入顶点数与边数:"<<endl; int nv,ne; cin>>nv>>ne; Graph graph(nv,ne); cout邻接表为

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

    数据结构 图的邻接表

    大家好,又见面了,我是你们的朋友全栈君。 呃,下面该写邻接表了……. 邻接表的出现是因为图若是稀疏图,用邻接矩阵会造成空间的浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用的那种。...邻接表为了避免内存的浪费引入了链式存储,它的处理办法是: 1.用一个一维数组存储顶点,当然你也可以用单链表存储, 2.用单链表存储顶点的邻接点,可以将顶点改为结构体数组,结构体中存放邻接点的指针,邻接点也创建一个结构体...下面是一个无向的网图: 邻接表中数据的存储图示如下(emmm,无向图果然没有有向图好画): emmm,终于画完了,我来介绍下这个图 顶点表也就是个结构体数组,是存放顶点的结构,顶点表中有data元素...边表也是一个结构体,内有adivex元素,存放邻接点的下标,weight存放顶点与邻接点之间线的权重,next是边表结构体指针,存放该顶点的下一个邻接点,next就是负责将顶点的邻接点连起来。...numarc; //当前邻接表的边数 }GraphAdjList; //建立图的邻接表 void CreateAdjListGraph(GraphAdjList &G) { ArcNode

    1.2K20

    数据结构与算法 - 图的邻接表 (思想以及实现方式)

    PS:邻接表,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。...图的邻接表储存方式相对于邻接矩阵比较节约空间,对于邻接矩阵需要分别把顶点和边(顶点之间的关系)用一维数组和二维数组储存起来。...邻接表 有向图 无向图 逆邻接表 有向图 邻接表实现步骤 结构体 创建图 顶点和边数,顶点需要用一维数组保存 获取顶点的下标,因为链接结点中的index域是顶点的下标值。...邻接矩阵 一维数组(顶点) 二维数组(邻接关系) 1:易于判定顶点是否邻接,查顶点的邻接点 2:插入、删除顶点复杂 邻接表 头结点(顶点) 表结点(邻接关系) 1:易于:查询某顶点的邻接点,边或弧的插入...4:逆邻接表 所谓逆邻接表就是方向相反的链接到顶点后面,一看图便知。 ? 完: 下一篇讲会讲解深度优先遍历和广度优先遍历基本使用和思想。

    5K30

    用c语言实现顺序表_顺序表代码讲解以及实现

    大家好,又见面了,我是你们的朋友全栈君。 你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿ 目录 一、学习内容 二、准备工作 三、顺序表的结构 四、顺序表的基本操作 1. 创建顺序表 2....因为顺序表的数据类型不一定是int,有可能是double等其他类型,采用宏定义的好处就是:若需要改变顺序表的数据类型,只需要在宏定义处改变int为其他的数据类型即可(理论上确实如此,但由于我的代码后面用到了随机数产生顺序表的元素...实际上就是表明顺序表基本操作的一个状态。用bool逻辑值也可以,或者等等,只要能表示出顺序表的基本操作的状态即可。...) { printf("您插入的元素超出了您创建顺序表的范围!...) { printf("您删除的元素超出了您创建顺序表的范围!

    2.1K20

    数据结构:图的存储结构之邻接表

    对于图来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。...因此我们考虑另外一种存储结构方式:邻接表(Adjacency List),即数组与链表相结合的存储方法。 邻接表的处理方法是这样的。...1、图中顶点用一个一维数组存储,另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。...2、图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图称为顶点vi作为弧尾的出边表。 例如图7-4-6就是一个无向图的邻接表结构。...若是有向图,邻接表的结构是类似的,如图7-4-7,以顶点作为弧尾来存储边表容易得到每个顶点的出度,而以顶点为弧头的表容易得到顶点的入度,即逆邻接表。 ?

    5.6K81

    图的存储方式之前向星与邻接表

    常用的邻接矩阵和邻接表都挺简单的,就不提了。 这个是ACM版本的前向星,本质就是用数组替换了链表,效果就是更方便一些。 虽然不如十字链表删除方便,但是也能比较方便地写出边删除的操作。...void clear(){ info.clear(); next.resize(0); to.resize(0); } }; 想了一下还是提一下邻接表吧...struct Edge{ int from,to,weight; }; vector G[maxn];//可以用来模拟邻接表 //使用的时候给对应的数组G[node]插入边即可,其实也挺方便的...另外一个是刘汝佳的蓝书里面的实现,应该也是邻接表,只是G[maxn][edgeNum]里面放的不再是直接放边对象,而是改为了边索引号n。...在很多时候,对边的信息没有过多要求时,直接用一两个int数组就可以表示全其信息,也比较方便。唯一的问题是不好删除。

    49410

    C语言实现哈希表_哈希表c语言代码

    常见的Hash算法有:MAC,CRC,MD5/MD4,SHA等。 ---- 简单的哈希表的实现,c语言。 哈希表原理 哈希表是为了根据数据的部分内容(关键字),直接计算出存放完整数据的内存地址。...也就是把具有相同hash值的元素放到一起,形成一个链表。这样在插入和寻找数据的时候就需要进一步判断。...举个例子:有三个key:key1,key3,key5通过散列算法keyToIndex得到的索引值都为2,也就是这三个key产生了碰撞,对于碰撞的处理,采取的是用链表连接起来,而没有进行再散列。...,因为C标准库中string.h中有一系列这样的函数。...因为这个哈希表中保存的是键值对,所以这个方法是从哈希表中查找key对应的value的。

    5.8K20

    【数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】

    任务描述 本关任务:编写一个程序实现图的邻接矩阵和邻接表的存储。 相关知识 为了完成本关任务,你需要掌握: 带权有向图 图的邻接矩阵, 图的邻接表。 1....带权有向图 针对有向图的邻接矩阵和邻接表的存储,如下列图形: 2....,例如在程序实现中可以采用类似 INT_MAX 这样能表示极大值的常量来表示无穷大的概念)。...图的邻接表 邻接表结点由三个域组成: adjvex指示与顶点vi邻接的点在图中的位置, nextarc指示下一条边或弧的结点, info存储与边或弧的权值。...: 测试输入:( 输入图的顶点数和边数,再输入图的邻接矩阵。)

    55810

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

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

    2.8K20

    基于邻接表的AOE网实现关键路径查询

    按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法,并验证如下图1所示AOE网的关键路径。...要求1.输入图的顶点数目.2.按偏序顺序输入各边顶点及权值.3.输入(0,0)结束4.程序会自动计算出关键路径知识点AOE网,即边表示活动的网,是一个带权的有向无环图,其中顶点表示事件(Event),每个事件表示在它之前的活动已经完成...算法设计输入e条弧,创建有向图的存储结构。判断是否为AOE网从源点出发,令ve[0]=0,按拓扑顺序求其余各顶点的最早发生时间ve[i]。...在循环中同时遍历邻接表中每一个边所存储指向的节点,并且更新其的ve[i].注:更新时,比较边的权加上更新结点的前一个结点的ve与 该结点本身的ve大小(全部初始化为0),取最大值。...iostream>#include #include #include #include using namespace std;/*创建图的邻接表

    45531

    【数据结构与算法】图的基本结构介绍 | 邻接表与邻接矩阵编码实战

    作者 :“大数据小禅” 文章简介:本篇文章对基本数据结构 图进行了一个概述,并使用领接矩阵与邻接表的方式来实现一个图 个人主页: 大数据小禅 图的基本结构介绍 图的应用 图的分类 图的应用...– 无权图 图的表示 邻接矩阵 顶点与顶点是相连的,用1来表示,不相连则用0。...adjMartix = new AdjMartix(); adjMartix.showAdj(); adjMartix.adj(3); } } 运行结果: 邻接表...邻接表它主要就是关心的是存在的边,不存在的边则不管,因此的话不会有空间上的浪费,邻接表=数组+链表。...链表数组 TreeSet低层使用的就是红黑树实现 private static TreeSet[] adj; //从文件中读取图的相关信息 //存放边的信息

    62210

    图详解第一篇:图的基本概念及其存储结构(邻接矩阵和邻接表)

    每个节点可以与其他节点直接或间接连接,这些连接关系可以具有方向性(有向图)或无方向性(无向图)。因此,图可用于表示各种关系,如网络、社交关系、地图等,并且在计算机科学和现实生活中有广泛的应用。...用邻接矩阵存储图的优点是能够快速知道两个顶点是否连通,取到权值 3....2.2 邻接矩阵代码实现 那下面我们就来实现一下邻接矩阵: 结构定义 那我们这里呢还是搞成模板,因为顶点的值可以是任意类型,那我们的模板都需要给哪些参数呢?...(每个顶点都有一个对应的链表,多条链表用一个指针数组就可以维护起来) 注意:无向图中同一条边在邻接表中出现了两次。...但是不方便确定两个顶点是否相连和获取权值(要遍历其中一个顶点的边链表查找O(N)) 2.4 邻接表代码实现 那我们再来实现一下邻接表。

    7.4K10

    6-2 邻接表存储图的广度优先遍历 (20 分)

    本文链接:https://blog.csdn.net/shiliang97/article/details/103128882 6-2 邻接表存储图的广度优先遍历 (20 分) 试实现邻接表存储图的广度优先遍历...函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储的图,定义如下: /* 邻接点的定义...PtrToGNode LGraph; /* 以邻接表方式存储的图类型 */ 函数BFS应从第S个顶点出发对邻接表存储的图Graph进行广度优先搜索,遍历时用裁判定义的函数Visit访问每个顶点。...*/ }; typedef PtrToGNode LGraph; /* 以邻接表方式存储的图类型 */ bool Visited[MaxVertexNum]; /* 顶点的访问标记 */ LGraph...CreateGraph(); /* 创建图并且将Visited初始化为false;裁判实现,细节不表 */ void Visit( Vertex V ) { printf(" %d", V)

    3K10
    领券