邻接表存储图

#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20

typedef struct ArcNode{
	int Adjvex;//存储所指顶点的位置
	struct ArcNode *nextarc;//指向下一结点
}ArcNode;
typedef struct VNode{
	char data;//存储结点
	ArcNode *firstarc;//指向第一个顶点
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
	AdjList vertices;//存储结点数组的别名
	int vexnum,arcnum;//节点数和边数
}ALGraph;

int LocateALGraph(ALGraph G, char v){
	int i;
	//返回结点的相应位置
	for(i = 0; i < G.vexnum; i ++){
		if(G.vertices[i].data == v)
			return i;
	}
	
	return -1;
}

void CreateAdjList(ALGraph &G){
	int i,j,k;
	char v1,v2;
	ArcNode *s,*p;
	
	scanf("%d%d",&G.vexnum,&G.arcnum);//输入边数和节点数
	
	getchar();
	for(i = 0; i < G.vexnum; i ++){
		scanf("%c",&G.vertices[i].data);
		G.vertices[i].firstarc = NULL;//输入结点,并为指针赋值为空
	}
	
	for(i = 0; i < G.arcnum; i ++){
		getchar();
		scanf("%c%c",&v1,&v2);//输入边
		
		k = LocateALGraph(G,v1);	j = LocateALGraph(G,v2);//返回相应位置
		
		s = (ArcNode *)malloc(sizeof(ArcNode));
		
		s->Adjvex = j;		s->nextarc = NULL;//用s来存储相应位置的值
		
		p = G.vertices[i].firstarc;//让p指向头结点所指的第一个元素
		
		if(!p){
			 G.vertices[i].firstarc = s;//如果p为空,则证明第一个所指结点为空,直接链接上即可
		}
		else{
			while(p->nextarc)
				p = p->nextarc;//找到为空的
			
			p->nextarc = s;
		}
		
	}
		
	
}

int main(){
	ALGraph G;
	
	CreateAdjList(G);
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值