图的存储结构
创始人
2024-01-20 09:06:04
0

图的存储结构

1.邻接矩阵表示法

设图G = (V, E)是具有n个顶点的图,顶点顺序依次为{v1,v2,v3.......}

a[N][N]为 n 阶方阵

  • G 的邻接矩阵具有此种性质:

    • a[i][j]=1,则存在边(vi, vj)或者弧 (即两点之间存在边或弧)
    • a[i][j]=0,则不存在边(vi, vj)或者弧 (即两点之间不存在边或弧)
  • 特点

    • 无向图的邻接矩阵对称,可压缩存储;有 n 个顶点的无向图所需存储空间为 n(n-1)/2。
    • **有向图的邻接矩阵不一定对称;**有 n 个顶点的有向图所需存储空间为 n²
    • 无向图中顶点 vi 的度是邻接矩阵中第 i 行 1 的个数
    • 有向图中
      • 顶点 vi 的出度是邻接矩阵中第 i 行 1 的个数(向外连弧,即作为弧尾)
      • 顶点 vi 的入度是邻接矩阵中第 i 列 1 的个数(被连入的弧,即作为弧头)
  • 存图结构

    • 我们需要定义两个数组
      • 一个一维数组:用来记录顶点的信息
      • 一个二维数组:用来记录顶点之间的关系(同a[i] [j]的描述)
  • 示例

    在这里插入图片描述

  • 存储结构

    #define INFINITY    INT_MAX // 最大值∞ 
    #define MAX_VERTEX_NUM   20 // 最大顶点个数 
    typedef enum {DG, DN, UDG, UDN} GraphKind;  //图的类型{有向图,有向网,无向图,无向网} 
    typedef struct ArcCell 
    { EType adj;  	  // EType是顶点关系类型,对无权图用1或0表示相邻否;                           			     // 对带权图,则为权值类型InfoType *info;// 该弧相关信息的指针
    } ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct 
    { VertexType vexs[MAX_VERTEX_NUM]; // 顶点向量(一维矩阵)AdjMatrix arcs; 				// 邻接矩阵(二维矩阵)   int vexnum, arcnum; 			// 图的当前顶点数和弧(边)数GraphKind kind; 				// 图的种类标志
    } MGraph; 
    
2.邻接表表示法
  • 存图结构

    • 将所有顶点存入一个表中,作为头结点的表

    • 将与每个头结点有邻接关系的点作为表结点链到头结点之后

      • 头结点包含数据域与指针域
      • 表结点包含邻接点域(邻接点在表头中的位置)与链域(指示下一条边或弧)

      在这里插入图片描述

  • 邻接表的特点

    • 顶点 vi 的出度为第 i 个单链表中的结点个数
    • 顶点 vi 的入度为整个单链表中邻接点域值是i-1的结点个数
    • 找出度易,找入度难
  • 示例
    在这里插入图片描述

  • 存储结构

    #define MAX_VERTEX_NUM 20//表结点的结构(链表结构)
    typedef struct ArcNode 
    { int adjvex; // 该弧所指向的顶点的位置    struct ArcNode *nextarc; // 指向下一条弧的指针  //InfoType *info; // 该弧相关信息的指针
    } ArcNode;//头结点数组
    typedef struct VNode 
    { VertexType data; // 顶点信息ArcNode *firstarc; // 指向第一条依附该顶点的弧  
    } VNode, AdjList[MAX_VERTEX_NUM]; //组合成的图的结构
    typedef struct 
    { AdjList   vertices; int   vexnum, arcnum; // 图的当前顶点数和弧数  int   kind; // 图的种类标志
    } ALGraph; 
    
3.十字链表表示法
  • 存图结构

    • 同样由两部分组成:顶点结点和弧结点

在这里插入图片描述

  • 存储结构

    #define MAX_VERTEX_NUM 20typedef struct ArcBox 
    { int tailvex, headvex; 		   // 该弧的尾和头顶点的位置 struct ArcBox *hlink, *tlink;  // 分别指向下一个弧头相同和弧尾相同的弧的指针域 InfoType *info;   			   // 该弧相关信息的指针 
    } ArcBox;typedef struct VexNode 
    { VertexType data; ArcBox *firstin, *firstout; // 分别指向该顶点第一条入弧和出弧 
    } VexNode; typedef struct 
    { VexNode xlist[MAX_VERTEX_NUM]; // 表头向量 int vexnum, arcnum; 			  // 有向图的当前顶点数和弧数 
    } OLGraph; 
    

相关内容

热门资讯

MySQL高级篇_第19章_数... 在任何数据库环境中,总会有 不确定的意外 情况发生,比如例外的停电、计算...
“剖肝沥胆”的意思 “剖肝沥胆”的意思 成语拼音: [pōu gān lì dǎn] ...
“母老虎”的意思 “母老虎”的意思 成语拼音: [mǔ lǎo hǔ] ...
“哽哽咽咽”的意思 “哽哽咽咽”的意思 成语拼音: [gěng gěng yè yè] ...
“一渊不两蛟”的意思 “一渊不两蛟”的意思 成语拼音: [yī yuān bù liǎng jiāo] ...
LVS负载均衡与keepali... 目录 一、LVS 负载均衡的结构 LVS三种工作模式 LVS调度算法 ipvsadm工具 二、KE...
数据结构与算法——堆的基本存储 目录 一、概念及其介绍 二、适用说明 三、结构图示 四、Java 实例代码 五.堆和栈的区别 一、...
Vue.js语法详解:从入门到... Vue.js是一个流行的JavaScript框架,用于构建用户界面。它的核心特性包括数...
“江淮河汉”的意思 “江淮河汉”的意思 成语拼音: [jiāng huái hé hàn] ...
“英雄气短”的意思 “英雄气短”的意思 成语拼音: [yīng xióng qì duǎn] ...
“神龙见首不见尾”的意思 “神龙见首不见尾”的意思 成语拼音: [shén lóng jiàn shǒu bù j...
“老生常谈”的意思 “老生常谈”的意思 成语拼音: [lǎo shēng cháng tán] ...
Application 初始化... Application 的 onCreate 和 attachBaseContextApplicat...
Unity 热更新技术 | (... 🎬 博客主页:https://xiaoy.blog.csdn.net ...
01分布式电源接入对配电网影响... 说明书 MATLAB代码:分布式电源接入对配电网影响分析 关键词:分布式...
“付诸一炬”的意思 “付诸一炬”的意思 成语拼音: [fù zhū yī jù] ...
四字开头的成语 四字开头的成语四字开头的成语1  四通五达  四通八达  四停八当  四体不勤  四体不勤  四体百...
“过目成诵”的意思 “过目成诵”的意思 成语拼音: [guò mù chéng sòng] ...
“年复一年”的意思 “年复一年”的意思 成语拼音: [nián fù yī nián] ...
2023-第十四届蓝桥杯冲刺计... 💬前言 💡本文以目录形式列举大纲,可根据题目点击跳转 dz...