图的存储结构—邻接表C语言实现
话不多说,上代码
我虽然讨厌写注释,但我更讨厌别人不写注释!
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/34612b27c6d0480a42ffb4db51cdd074.webp?x-image-process=image/format,png#pic_center)
源代码
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
#define maxInt 100
typedef char ElemType;
typedef int EdgeType;
typedef struct ArcNode{
int index,info;
ArcNode *nextNode;
}ArcNode;
typedef struct{
ElemType data;
ArcNode *firstNode;
}head,List[maxsize];
typedef struct{
List L;
int arcnum,vexnum;
}Graph;
int seek(Graph G,char u);
void creatGraph(Graph &G);
void display(Graph G);
void creatGraph(Graph &G){
printf("请输入图的顶点和边的个数:\n");
scanf("%d %d",&G.vexnum,&G.arcnum);
for(int i=0;i<G.vexnum;i++){
G.L[i].firstNode=NULL;
}
printf("请依次输入顶点元素:\n");
getchar();
for(int i=0;i<G.vexnum;i++){
scanf("%c",&G.L[i].data);
getchar();
}
printf("请输入顶点与顶点直接的关系以及权值:\n");
for(int i=0;i<G.vexnum;i++){
char u,v;
int info;
scanf("%c %c %d",&u,&v,&info);
getchar();
int ii=seek(G,u);
int jj=seek(G,v);
if(ii==-1||jj==-1){
printf("请检查顶点输入是否正确\n");
exit(0);
}
ArcNode *p;
p=new ArcNode;
p->index=jj;
p->info=info;
p->nextNode=G.L[ii].firstNode;
G.L[ii].firstNode=p;
ArcNode *q;
q=new ArcNode;
q->index=ii;
q->info=info;
q->nextNode=G.L[jj].firstNode;
G.L[jj].firstNode=q;
}
printf("创建成功!\n");
}
int seek(Graph G,char u){
for(int i=0;i<G.vexnum;i++){
if(G.L[i].data==u) return i;
}
return -1;
}
void display(Graph G){
printf("邻接表展示:\n");
for(int i=0;i<G.vexnum;i++){
printf("%c:",G.L[i].data);
ArcNode *p;
p=G.L[i].firstNode;
while(p!=NULL){
printf("( %d %d ) ",p->index,p->info);
p=p->nextNode;
}
printf("\n");
}
}
int main(){
Graph G;
creatGraph(G);
display(G)
return 0;
}
蟹蟹观看!