C语言数据结构无向图

#include<stdio.h>
#include<stdlib.h>




#define num 8




struct nearnode{

int order;
nearnode* pnext;
};


struct topnode{

char data[20];
nearnode* phead;
};


struct Gra{

topnode top[num];
int topnum;
int sidenum;
};


void create(Gra* gra){

puts("请输入图的弧数 ");
scanf("%d",&gra->sidenum);
gra->topnum = num;
for(int i = 0;i < num;i++){

printf("请输入第%d个定点储存的数据信息 ",i+1);
scanf("%s",gra->top[i].data);
}
for(int i = 0;i < gra->sidenum;i++){

int temp_one;
int temp_two;

printf("请输入第%d条边的起始顶点 ",i+1);
scanf("%d",&temp_one);
printf("请输入第%d条边的终结顶点 ",i+1);
scanf("%d",&temp_two);

nearnode* newnode_one = NULL;
newnode_one = (nearnode*)malloc(sizeof(nearnode));
newnode_one->pnext = NULL;
newnode_one->order = temp_one;

if(gra->top[temp_two].phead == NULL){
gra->top[temp_two].phead = newnode_one;
}
else{

for(;gra->top[temp_two].phead->pnext != NULL;gra->top[temp_two].phead = gra->top[temp_two].phead->pnext); 
gra->top[temp_two].phead->pnext = newnode_one;
}

nearnode* newnode_two = NULL;
newnode_two = (nearnode*)malloc(sizeof(nearnode));
newnode_two->pnext = NULL;
newnode_two->order = temp_two;

if(gra->top[temp_one].phead == NULL){

gra->top[temp_one].phead = newnode_two;
}
else{

for(;gra->top[temp_one].phead->pnext != NULL;gra->top[temp_one].phead = gra->top[temp_one].phead->pnext); 
gra->top[temp_one].phead->pnext = newnode_two;
}

}
}


void viewer(Gra* gra){

for(int i = 0;i < gra->topnum;i++){

printf("第%d个边结点对应的是%c顶点的信息 ",i+1,i+65);
}

puts(" ");

for(int i = 0;i < gra->topnum;i++){

printf("第%d个顶点储存的信息是:%s ",i+1,gra->top[i].data);
}

puts(" ");

for(int i = 0;i < num;i++){

for(;gra->top[i].phead != NULL;gra->top[i].phead = gra->top[i].phead->pnext){


printf("与第%d个顶点相连的边结点的序号为%d ",i+1,gra->top[i].phead->order);
}
}
}




int main(int argc,char** argv){

Gra* gra = NULL;
gra = (Gra*)malloc(sizeof(Gra));
create(gra);
viewer(gra);
}
原文地址:https://www.cnblogs.com/viplanyue/p/12700742.html