当前位置: 首页 > news >正文

【数据结构】图的存储结构及实现(邻接表和十字链表)

一.邻接矩阵的空间复杂度

假设图G有n个顶点e条边,则存储该图需要O(n^2)

不适用稀疏图的存储

二.邻接表

1.邻接表的存储思想:

对于图的每个顶点vi,将所有邻接于vi的顶点链成一个单链表,称为顶点vi的边表(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维数组构成了顶点表。

2.邻接表的结构定义

struct ArcNode{int adjvex;struct ArcNode *next;
};template <class T>
struct VertexNode{T vertex;struct ArcNode *firstEdge;
};

邻接表的空间复杂度为O(n+e)

更适用于有向图的存储

3.无向图的邻接表

1.如何求顶点i的度?

顶点i的边表中结点的个数 

2.如何判断顶点vi和vj之间是否有边?

测试顶点vi的边表中是否有终点为j的结点

4.有向图的邻接表

1.如何求顶点i的出度?

顶点i的边表中结点的个数 

2.如何求顶点i的入度?

各顶点的出边表中以顶点i为终点的结点个数

5.网图的邻接表

三.邻接表存储有向图的类

struct ArcNode{int adjvex;struct ArcNode *next;
};template <class T>
struct VertexNode{T vertex;struct ArcNode *firstEdge;
};
template <class T>
class ALGraph{
private:VertexNode<T> adjList[MAX_VERTEX];int vertexNum,arcNum;
public:ALGraph(T v[],int n,int e);~ALGraph();void DFSTraverse();void BFSTraverse();
};

template <class T>
ALGraph<T>::ALGraph(T v[],int n,int e){int vi,vj;ArcNode *s;vertexNum=n;arcNum=e;for(int i=0;i<n;i++){adjList[i].vertex=v[i];adjList[i].firstEdge=NULL;}for(int i=0;i<arcNum;i++){cin>>vi>>vj;s=new ArcNode;s->adjvex=vj;s->next=adjList[vi].firstEdge;adjList[vi].firstEdge=s;}
}
template <class T>
ALGraph<T>::~ALGraph(){int i,j;ArcNode *p;for(i=0;i<vertexNum;i++){p=adjList[i].firstEdge;if(p){while(p){adjList[i].firstEdge=p->next;delete p;p=adjList[i].firstEdge;}}}
}

 

四.逆邻接表

对于邻接表来说,查找入度非常困难。

所以引入了逆邻接表。

五.十字链表 

十字链表的结点结构:

六.图的存储结构的比较

http://www.lryc.cn/news/234980.html

相关文章:

  • ROS Turtlebot3多机器人编队导航仿真
  • 端口配置错误,导致RabbitMq启动报错
  • <MySQL> 什么是JDBC?如何使用JDBC进行编程?
  • 基于安卓android微信小程序的装修家装小程序
  • 基于SSM的小区物业管理系统设计与实现
  • c语言免杀火绒
  • MyBatis #{} 和 ${} 的区别
  • 计算机科学速成课
  • 基于单片机的汽车安全气囊系统故障仿真设计
  • JPA整合Sqlite解决Dialect报错问题, 最新版Hibernate6
  • 算法通关村第十关-青铜挑战快速排序
  • whisper large-v3 模型文件下载链接
  • Ajax 之XMLHttpRequest讲解
  • 小程序里面循环使用ref的话获取不到
  • PY32F002B从压缩包到实现串口printf输出
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(八)
  • CorelDRAW2024最新版本的图形设计软件
  • 【作业】操作系统实验一:进程和线程
  • Linux 环境删除Conda
  • uni-app(1)pages. json和tabBar
  • window系统vscode 编译wvp前端代码
  • 获取虎牙直播源
  • Halcon (2):Halcon基础知识
  • 测不准原理
  • 微机原理_12
  • 设计模式(5)-使用设计模式实现简易版springIoc
  • 数据结构与集合源码
  • nodejs+vue面向中小学课堂教学辅助软件系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
  • 智能配电系统解决方案
  • Python基础入门---conda 如何管理依赖包以及复制相同环境的