图的存储结构:邻接表法
- 产生条件:
- 邻接表法的定义:
- 邻接表法的特点:
- 邻接表法的代码定义:
- 邻接表法与邻接矩阵法的对比:
产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大
邻接表法的定义:
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/498681902eee4601b5fb45e827ee43a6.jpg)
文章图片
例:
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/634753a2162546378a9bf486964d3e53.jpg)
文章图片
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/9cdd8f0e673d4fd9b41b4211c02705ec.jpg)
文章图片
邻接表法的特点:
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/d4353553f7aa4740859734c7c555e376.jpg)
文章图片
ps:
1、存储空间 = 节点占用空间 + 边占用空间
2、邻接表的长度表示该顶点的出度
3、邻接表出现某一顶点的次数为该顶点的入度
邻接表法的代码定义:
#define MaxVertexTypeNum 100
typedef char VertexType;
typedef int EdgeType;
typedef struct ArcNode{//边表节点
int adjvex;
//下一个节点的数据
struct ArcNode *next;
// 指向下一个结点的指针
// InfoType info;
//权值
}ArcNode;
//边表节点的类型 typedef struct VNode{//顶点表节点
VertexType data;
//顶点的数据
ArcNode *first;
//指向边表的头指针
}VNode,AdjList[MaxVertexTypeNum];
// 邻接表类型 typedef struct{//邻接表
AdjList vetices;
//所有结点的数据
int vexnum,arcnum;
//节点数和边数
}ALGraph;
//邻接表类型
邻接表法与邻接矩阵法的对比: 【#|数据结构之图的存储结构(邻接表法)】
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/78e1aab8a3d54b3ca2f5d19da6c6f838.jpg)
文章图片
![#|数据结构之图的存储结构(邻接表法)](https://img.it610.com/image/info8/a78ae5275232477487cacb00ea3551a3.jpg)
文章图片
推荐阅读
- 数据结构和算法|LeetCode 的正确使用方式
- #|7.分布式事务管理
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- #|算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
- #|阿尔法点亮LED灯(一)汇编语言
- #|Multimedia
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 基础课|使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附((n^2 - 1) 数码问题控
- #|学习笔记 | Ch05 Pandas数据清洗 —— 缺失值、重复值、异常值
- win10|搏一搏 单车变摩托,是时候捣鼓一下家中的小米电视机啦。