思维导图:

在这里插入图片描述

产生条件:

当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大
当用邻接表法存储时:在进行入度查询时只能进行全部节点遍历,很不方便

十字链表法的定义:

**PS:**只能存储有向图
在这里插入图片描述

找指定顶点的所有出边:顺着绿色指针找
找指定顶点的所有入边:顺着橙色指针找

在这里插入图片描述
顶点表节点:

1、data:顶点数据域
2、firstin:入边单链表头指针
3、firstout:出边单链表头指针

边表节点:

1、tailvex:尾域,存放弧尾节点
2、headvex:头域,存放弧头节点
3、hlink:弧头相同的下一条边,即指向下一个边表节点的指针
4、tlink:弧尾相同的下一条边
5、info:权值

十字链表法的代码定义:

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

typedef struct ArcNode{				//边表节点 
	int tailvex,headvex;			//尾域和头域			
	struct ArcNode *hlink , *think;	//出单链表和入单链表 
	//InfoType info; 				//权值 
}ArcNode;							//边表节点的类型 

typedef struct VNode{				//顶点表节点 
	VertexType data;				//顶点的数据 
	ArcNode *firstin,*firstout;		//入单链表的头指针和入单链表的头指针 
}VNode;	// 邻接表类型 

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

性能分析:

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

Logo

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

更多推荐