我是靠谱客的博主 唠叨面包,这篇文章主要介绍C语言邻接表各种操作,现在分享给大家,希望可以做个参考。

代码

#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语言邻接表各种操作内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(141)

评论列表共有 0 条评论

立即
投稿
返回
顶部