数据结构——邻接表法(C语言实现)
#include <stdio.h>
#include <stdlib.h>
#define max 100
typedef int Elemtype;
typedef struct ArcNode{
int adjvex;
struct ArcNode *next;
}ArcNode;
typedef struct VNode{
Elemtype data;
ArcNode *first;
}VNode;
typedef struct{
VNode vertices[max];
int arcnum,vexnum;
int graphType;
}ALGraph;
int main()
{
ALGraph graph;
printf("请输入图边的个数和顶点的个数:\n");
scanf("%d %d",&graph.arcnum,&graph.vexnum);
int i = 0;
printf("请输入图的种类:\n");
scanf("%d",&graph.graphType);
for(i = 0;i < graph.vexnum;i++)
{
printf("请输入顶点[%d]的data:\n",i);
scanf("%d",&graph.vertices[i].data);
graph.vertices[i].first = NULL;
}
int j,nextbool;
ArcNode *s,*r;
for(i = 0;i < graph.vexnum;i++){
printf("请输入结点[%d]第一条边指向的结点下标:\n",i);
scanf("%d",&j);
s = (ArcNode*)malloc(sizeof(ArcNode));
s->adjvex = j;
s->next = NULL;
graph.vertices[i].first = s;
while(1){
printf("有下一条边输入1,否则输入0;\n");
scanf("%d",&nextbool);
if(nextbool == 0) break;
r = (ArcNode*)malloc(sizeof(ArcNode));
printf("请输入这条边指向的结点下标:\n");
scanf("%d",&j);
r->adjvex = j;
r->next = NULL;
s->next = r;
s = r;
}
}
printf("创建成功!\n");
for(i = 0;i < graph.vexnum;i++)
{
s = graph.vertices[i].first;
printf("结点%d指向的结点下标",graph.vertices[i].data);
printf(" ");
while(s != NULL)
{
printf("%d ",s->adjvex);
s = s->next;
}
printf("\n");
}
return 0;
}