数据结构(无向图的邻接表创建)

这篇博客介绍了如何使用邻接表来表示一个无向图。首先定义了顶点表结点和边表结点的数据结构,包括存储顶点信息、邻接点下标和权值等。接着,通过头插法创建了一个邻接表,输入顶点数和边数,然后依次输入顶点信息和连接的顶点序号,动态构建边表。
摘要由CSDN通过智能技术生成

邻接表:
下图为一个无向图的邻接表结构
在这里插入图片描述
在图中 data和firstedge在顶点表中,data存储顶点的信息firstedge指向边表的第一个结点。
边表结点由adjvex与next两个域组成,其中adjvex用于存储某顶点的邻接点在顶点表的下标。next则存储指向边表中下一个结点的指针。
在这里插入图片描述
对于带权值的网图,可以在边表结点定义增加一个weight的数据域用于存储权值信息。
对于结点定义的代码:

typedef struct Ding//顶点表结点  
{
	char data;//顶点信息 
	struct bian *firstedge;//边表头指针  
}ding[100];
typedef struct bian
{
	int biao;
	int weight;//储存权值 
	struct bian *next;
}bian;
typedef struct{
	ding adjlist;
	int numv;//顶点数
	int nume;//边数 
}Data;

创建邻接表:

void creat(Data *G)
{
	int i,j,k;
	bian *e;//用于创建边结点时
	printf("输入顶点数与边数:");
	scanf("%d %d",&G->numv,&G->nume);
	printf("输入顶点信息");
	for(i=0;i<G->numv;i++){
		scanf("%d",&G->adjlist[i].data);
		G->adjlist[i].firstedge=NULL;
	} 
	for(k=0;k<G->nume;k++){
		printf("输入边上的顶点序号:");
		scanf("%d %d",&i,&j);//输入连接边的两个结点
		e=(bian *)malloc(sizeof(bian));//申请内存
		e->biao=j;//边结点序号为j
		e->next=G->adjlist[i].firstedge;//头插法插入
		G->adjlist[i].firstedge=e;
		e=(bian *)malloc(sizeof(bian));
		e->biao=i;
		e->next=G->adjlist[j].firstedge;
		G->adjlist[j].firstedge=e;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值