首页 > 其他分享 >描述图的两种数据结构 - 邻接表和邻接矩阵

描述图的两种数据结构 - 邻接表和邻接矩阵

时间:2023-05-29 14:56:11浏览次数:34  
标签:表示 示例 邻接矩阵 链表 邻接 顶点 数据结构

图的邻接表和邻接矩阵是两种常用的表示图的数据结构,用于描述图中各个顶点之间的连接关系。

图是由一组顶点和一组边组成的数据结构,顶点表示图中的对象,边表示对象之间的关系。邻接表和邻接矩阵都可以有效地表示图的结构,并提供了不同的优势和适用场景。

  1. 邻接表:
    邻接表是一种链表的集合,用于表示图中每个顶点以及与之相邻的顶点。对于每个顶点,邻接表中都有一个链表,链表中存储着与该顶点直接相连的其他顶点。

示例:
考虑下面这个无向图:

     A
    / \
   B---C
  / \ / \
 D---E---F

使用邻接表来表示该图的结构如下:

A -> B -> C
B -> A -> C -> D -> E
C -> A -> B -> E -> F
D -> B -> E
E -> B -> C -> D -> F
F -> C -> E

在这个示例中,每个顶点都对应一个链表,链表中存储与该顶点直接相连的其他顶点。例如,顶点A对应的链表包含顶点B和C,顶点B对应的链表包含顶点A、C、D和E,以此类推。

邻接表的优点是对稀疏图(边数相对顶点数较少)非常高效。它节省了存储空间,因为只需要存储与每个顶点相邻的顶点列表。在图中添加或删除边的操作上,邻接表的时间复杂度为O(1)。然而,查找特定边的操作相对较慢,时间复杂度为O(V),其中V是顶点的数量。

  1. 邻接矩阵:
    邻接矩阵是一个二维矩阵,用于表示图中顶点之间的连接关系。矩阵的行和列分别代表图中的顶点,矩阵中的元素表示对应顶点之间是否存在边。

示例:
继续使用上述无向图的示例,使用邻接矩阵来表示该图的结构如下:

    A  B  C  D  E  F
A   0  1  1  0  0  0
B   1  0  1  1  1  0
C   1  1  0  0  1  1
D   0  1  0  0  1  0
E   0  1  1  1

  0  1
F   0  0  1  0  1  0

在这个示例中,矩阵中的元素表示对应顶点之间是否存在边,1表示存在边,0表示不存在边。例如,第一行第二列的元素为1,表示顶点A与顶点B之间存在边。

邻接矩阵的优点是在查找特定边的操作上非常高效,时间复杂度为O(1)。同时,邻接矩阵还可以方便地进行图的遍历和某些图算法的实现。然而,邻接矩阵需要较大的存储空间,因为它需要一个二维矩阵来表示所有顶点之间的连接关系。在稀疏图的情况下,邻接矩阵可能会浪费大量的存储空间。

综上所述,邻接表和邻接矩阵都是常用的图的表示方法,各自适用于不同的场景。邻接表适合表示稀疏图,可以节省存储空间,并且对于添加或删除边的操作效率较高。邻接矩阵适合表示稠密图,可以快速查找特定边,并方便进行图的遍历和一些算法的实现。根据图的特点和需求,选择适合的表示方法可以提高图算法的效率和性能。

标签:表示,示例,邻接矩阵,链表,邻接,顶点,数据结构
From: https://www.cnblogs.com/sap-jerry/p/17440411.html

相关文章

  • 数据结构与算法
    @目录数据结构与算法图解:算法——排序普通(简单)排序冒泡算法选择排序插入排序希尔排序堆排序递归排序归并排序快速排序分布式排序计数排序桶排序基数排序算法——搜索顺序搜索(线性搜索)有序搜索二分搜索插值搜索斐波那契搜索索引搜索(分块搜索)树搜索哈希搜索算法——随机算法算法设......
  • 初级数据结构--线性表
    线性表定义线性表是具有相同数据类型n(n>=0)个数据元素的有限序列。当n=0时线性表为一个空表。顺序表实现方式:动态分配、静态分配特点:随机访问储存密度高扩展容量不方便插入删除数据元素不方便......
  • 第三章 基本数据结构
    3.1线性数据结构一旦某个元素被添加进来,它与前后元素的相对位置将保持不变3.2栈3.3.1什么是栈添加和删除操作总发生在同一端,即顶端,另一端称为底端。元素添加顺序:后进先出。应用:点击返回按钮,反向浏览网页。......
  • 《数据结构与算法》之栈结构
    导言:在计算机发明之初是为了计算,所以叫计算机,对我们给定的一个算式,然后给定的一套规则加,减,乘,除,等,它就可以自己进行计算了,然后返回一个结果给我们对于一般的算式:2+3+4很显然,从左往右依次扫描,依次相加很简单的计算出来,因为它们是同级运算,可以很简单的做到但是,常见的运算不只......
  • 数据结构与算法脉络总结
    目录一、数据结构1.链表2.栈3.队列4.散列表5.集合6.字典树7.堆8.优先队列9.并查集二、算法1.排序2.字符串3.图论4.贪心5.动态规划6.其他:分治、二分查找、双指针、多路归并一、数据结构1.链表2.栈3.队列4.散列表5.集合6.字典树7.堆8.优先队列9.......
  • 数据结构之队列
    @TOC前言本文章讲述的是数据结构的特殊线性表——队列一.什么是队列,队列的特点队列是数据结构中的一种特殊的线性表,它与栈不同,队列的基本图例如上图:显然,队列的特点就是:先进先出FirstInFirstOut那么我们使用什么样的方式来实现队列呢?基于队列的特点,使用链表而不是数组来实现队......
  • 王道数据结构算法实现
    一、线性表1.顺序表#include<stdlib.h>#include<stdio.h>#include<iostream>usingnamespacestd;#defineInitSize10//定义最大长度静态分配//typedefstruct{// intdata[InitList];// intlength;//}SqlList;//动态分配typedefstruct{ int*data......
  • 数据结构之——栈
    @TOC前言本文主要讲述特殊的线性表——栈:栈是什么,栈的特点数据结构中有一种特殊的线性表叫栈。栈有一种特点:它允许后进入的数据先拿出来。类似一个弹夹,或是一个装砖头的容器。栈的基本操作有如上图:类比一个缸,缸的底端是栈底,顶端是栈顶,放入数据称为入栈,取出数据称为出栈。对于一个......
  • 用Python开发输入法后台(5)——数据结构
    全部汉字我从网上收集了一些资料,构建了一个<全部汉字.json>文件,文件格式如下所示:{"吖":[["aa","ya"],"szhdps"],"呵":[["aa",......
  • 数据结构与算法—排序算法篇
    1、选择排序1.1、算法思想每趟从待排序的数据元素中,选出最小(或最大)的一个元素,顺序放在待排序的数列最前面,直到全部待排序的数据元素排完。1.2、步骤1、查找此数列中的最小元素,将其与第一个交换2、从第二个值开始找,查找到最小元素,将其与第二个交换3、以此类推,直到遍历结束1.3、算法......