图的邻接表存储实现

数据结构老师布置了一道图的题(下图),这道题对于刚接触图理论知识并且还没完全搞懂的我属实有难度,花了将近半天才终于搞懂里面的弯弯绕绕!

#include<stdio.h>
#include<malloc.h>
#define INF 32767
#define MAXV 20
typedef char InfoType;//顶点信息必须是char类型,否则输入的数据全部变成G->adjlist[0].info
typedef struct ANode {
	int adjvex;
	int weight;
	struct ANode* nextarc;
}ArcNode;
typedef struct VNode {
	InfoType info;
	ArcNode* firstarc;
}VNode;
typedef struct {
	VNode adjlist[MAXV];
	int n, e;
}AdjGraph;
void CreateAdj(AdjGraph*& G) {
	int n, e;
	ArcNode* p;
	G = (AdjGraph*)malloc(sizeof(AdjGraph));
	scanf("%d %d", &n, &e);
	for (int i = 0; i < n; i++) {
		G->adjlist[i].firstarc = NULL;
	}
	G->n = n; G->e = e;
	char c = getchar();//接收换行符
	for (int i = 0; i < G->n; i++) {
		scanf("%c", &G->adjlist[i].info);
	}
	int i = 0, j = 0;
	c = getchar();//接收换行符
	for (int k = 0; k < G->e; k++) {
		scanf("%c%c", &i,&j);
//两个for循环使用头插法,保证不落下任何边
		for (int m = 0; m < G->n; m++) {
			if (G->adjlist[m].info == i) {
				p = (ArcNode*)malloc(sizeof(ArcNode));
				p->adjvex = j-48;
				p->nextarc = G->adjlist[m].firstarc;
				G->adjlist[m].firstarc = p;
				break;
			}
	}
		for (int m = 0; m < G->n; m++) {
			if (G->adjlist[m].info == j) {
				p = (ArcNode*)malloc(sizeof(ArcNode));
				p->adjvex =i-48;//转为数字(i为字符,转为数字会比以整数输入的多了58)
				p->nextarc = G->adjlist[m].firstarc;
				G->adjlist[m].firstarc = p;
				break;
			}
		}
		c = getchar();//接收换行符
	}
}
void DispAdj(AdjGraph* G) {
	int i; ArcNode* p;
	for (i = 0; i < G->n; i++) {
		printf("%c", G->adjlist[i].info);
		printf("->");
		p = G->adjlist[i].firstarc;
		while (p != NULL) {
			printf("%d", p->adjvex);
			printf("->");
			p = p->nextarc;
		}
		printf("NULL");
		printf("\n");
	}
}
int main() {
	AdjGraph* G;
	CreateAdj(G);
	DispAdj(G);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值