数据结构之图的存储结构:十字链表法

思维导图:

在这里插入图片描述

产生条件:

当用邻接矩阵存储时:空间复杂度为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|)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值