概述
代码
#include <stdio.h>
#include <malloc.h>
#define MVNum 100 //最大的顶点数
typedef int VerTexType;
typedef struct ArcNode {//定义边节点
int adjves;//该边所指向的顶点的位置
struct ArcNode * nextarc;//指向下一条边的指针
}ArcNode;
typedef struct VNode{//定义顶点的结构
VerTexType data;//顶点信息
ArcNode *firstarc;//指向第一条依附该顶点的指针
}VNode,Adjlist[MVNum];//Adjlist v == VNode v[MVnum]
typedef struct { //定义图
Adjlist vertices;//vertex的复数
int vexnum, arcnum;//图当前的顶点数和弧数
}ALGraph;
int LocateVex(ALGraph G,VerTexType u){
for (int i = 0; i <G.vexnum ; ++i) {
if(u==G.vertices[i].data)
return i;
}
}
void CreatADGra(ALGraph *G){
printf("请输入总顶点数和弧数n");
scanf("%d,%d",&G->vexnum,&G->arcnum);
for (int i = 0; i <G->vexnum ; ++i) {//输入顶点信息
scanf("%d",&G->vertices[i].data);
G->vertices[i].firstarc=NULL;//第一条边初始化指向为NUll
}
for (int k = 0; k <G->arcnum ; ++k) {//输入各边,构造邻接表
int v1,v2;
int i,j;
scanf("%d,%d",&v1,&v2);
i=LocateVex(*G,v1);
j=LocateVex(*G,v2);
ArcNode *p1,*p2; //生成新的节点
p1=(ArcNode *)malloc(sizeof(ArcNode));
p1->adjves=j;
//连接v2
//头插法将p1插入顶点vi的边表头部
p1->nextarc=G->vertices[i].firstarc;
G->vertices[i].firstarc=p1;
p2=(ArcNode *)malloc(sizeof(ArcNode));
p2->adjves=i;
//连接v2
//头结点
p2->nextarc=G->vertices[j].firstarc;
G->vertices[j].firstarc=p1;
}
}
参考链接
最后
以上就是唠叨面包为你收集整理的C语言邻接表各种操作的全部内容,希望文章能够帮你解决C语言邻接表各种操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复