C语言实现数据结构代码(四)-图-图的存储结构

本文详细介绍了图的三种常见存储结构:邻接矩阵、邻接表和邻接多重表。邻接矩阵通过二维数组表示图中顶点之间的连接关系;邻接表则使用链表节省空间,尤其适用于稀疏图;邻接多重表结合了两者优点,适用于有向图,包含边的多重性信息。这些数据结构是图算法实现的基础。
摘要由CSDN通过智能技术生成

一、邻接矩阵

//邻接矩阵结构体定义
typedef struct 
{
	int no; //顶点编号
	char info;  //顶点其他信息,题目中无要求可不写 
}VertexType; 	//顶点类型 

typedef struct
{
	int edge[maxSize][maxSize];		//邻接矩阵定义,如果是有权图,int改为float 
	int n,e;			//分别为顶点数和边数
	VertexType vex[maxSize];		//存放结点信息 
}MGraph;				//图的邻接矩阵类型

二、邻接表

//邻接表存储的定义表示
typedef struct ArcNode
{
	int adjvex;  //该边所指向的结点的位置
	ArcNode *nextarc;   //指向下一条边的指针
	int info;			//该边的相关信息(如权值),这一句用的不多,可不写 
}ArcNode;

typedef struct
{
	char data;			//顶点信息 
	ArcNode *firstarc;	//指向第一条边的指针 
}VNode;

typedef struct
{
	VNode adjlist[maxSize];  //邻接表
	int n,e;				//顶点数和边数 
}AGraph;			//图的邻接表类型 

三、邻接多重表

 

 

#define MAX_VERTEX_NUM 20                   //图中顶点的最大个数
#define InfoType int                        //边含有的信息域的数据类型
#define VertexType int                      //图顶点的数据类型
typedef enum {unvisited,visited}VisitIf;    //边标志域
typedef struct EBox{
    VisitIf mark;                           //标志域
    int ivex,jvex;                          //边两边顶点在数组中的位置下标
    struct EBox * ilink,*jlink;             //分别指向与ivex、jvex相关的下一个边
    InfoType *info;                         //边包含的其它的信息域的指针
}EBox;
typedef struct VexBox{
    VertexType data;                        //顶点数据域
    EBox * firstedge;                       //顶点相关的第一条边的指针域
}VexBox;
typedef struct {
    VexBox adjmulist[MAX_VERTEX_NUM];//存储图中顶点的数组
    int vexnum,degenum;//记录途中顶点个数和边个数的变量
}AMLGraph;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值