邻接矩阵:
使用两个数组来存储数据元素(顶点)和数据元素之间的关系(边或弧)的信息。
一维数组:用于存储顶点。
二维数组:用于存储弧或边。
邻接矩阵的优点:
访问速度快,方便计算结点的度、入度、出度。
邻接矩阵的缺点:
顶点的容量有限,扩容非常麻烦,只适合存储稠密图,存储稀疏图时会有大量的内存浪费。
邻接表:
采用一维数组加单向链表的方式存储存储。
一维数组:用于存储顶点和单向链表的头指针。
单向链表:存储着从该顶点出发的弧或边。
邻接表优点:
与邻接矩阵相比,它可以节约内存,有多少条边或弧就创建多少个链表节点,比较适合存储稀疏图。
邻接表缺点:
计算入度、删除节点时比较麻烦。
十字链表:
采用一维数组加两个十字链表进行存储,之所以叫十字链表,是因为它的链表弧节点会被两个链表指向,同时弧节点有两个指针,指向后续的弧节点。
一维数组:存储了顶点数据,两个链表头指针。
出度链表:指向的是以该结点作为弧尾的弧节点。
入度链表:指向的是以该结点作为弧头的弧节点。
十字链表的优点:
与邻接矩阵相比,它更节约内存,与邻接表相比它更方便计算顶点的出度。
十字链表的缺点:
删除顶点和删除弧时比较麻烦,也可以表示与实现无向图,但更合适表示与实现有向图。