产生条件:

当用邻接矩阵法存储时:空间复杂度为O(|V|^2),太大
当用邻接表法存储时:一条边会重复存储两次,产生冗余

邻接多重表的定义:

在这里插入图片描述

在这里插入图片描述

顶点表节点:

1、data:顶点数据域
2、firstedge:边表节点的头指针

边表节点:

1、ivex:该边的第一个端点
2、ilink:与该端点相邻的下一个边表节点的指针
3、jvex:该边的第二个端点
4、jlink:与该端点相邻的下一个边表节点的指针
5、info:权值
6、mark:标记

邻接多重表的代码定义:

#define MaxVertexTypeNum 100
typedef char VertexType;		
typedef int EdgeType;	

typedef struct ArcNode{					//边表节点 
	int ivex,jvex;						//边的俩个节点			
	struct ArcNode *ilink , *jhink;		//维护俩个节点的边表 
	//InfoType info; 					//权值 
	//bool mark;						//标记位 
}ArcNode;								//边表节点的类型 

typedef struct VNode{					//顶点表节点 
	VertexType data;					//顶点的数据 
	ArcNode *firstedge;					//边表的头指针 
}VNode;									// 邻接表类型 

typedef struct{							//十字链表 
	VNode adjmulist[MaxVertexTypeNum];	//所有结点的数据 
	int vexnum,arcnum;					//节点数和边数 
}ALGraph;								//十字链表的类型 

删除:

删除边AB:
在这里插入图片描述
在这里插入图片描述

删除节点E:
在这里插入图片描述在这里插入图片描述

性能分析:

空间复杂度:O(|v| + |E|)

十字链表与邻接多重表的对比

十字链表: 用于有向图,解决了无法快速找到一个顶点入边的问题
邻接多重表: 用于无向图,解决了重复存储同一条边2次的问题
在这里插入图片描述在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐