#include<>
#include<>
#define MVNum 100
//边表
typedef struct ArcNode
{
int adjvex;//该边另一条结点位置
struct ArcNode* nextarc;//指向下一条边的指针
int weight;//权值
}ArcNode;
//顶点
typedef struct VNode
{
int date;//当前顶点信息
ArcNode* firstarc;//指向第一条边依附的指针
}VNode,AdjList[MVNum];
//邻接表
typedef struct
{
AdjList vertices;//存放顶点信息的数组
int vexnum, arcnum;//存放当前顶点数和弧数
}ALGraph;
//定位函数
int LocateVex(ALGraph G, char v)
{
for (int i = 0; i < ; i++)
{
if ([i].date == v)
return i;
}
}
//创建
void Create(ALGraph& G)
{
int i, k;
printf("输入总顶点数和边数:\n");
scanf("%d%d",&, &);//输入总顶点数和边数
printf("分别输入各个顶点的值:\n");
for (i = 0; i < ; i++)
{
scanf("%d", &[i].date);//输入顶点值
[i].firstarc = NULL;//初始化指针域为空
}
printf("分别输入各条边连接的两个顶点:\n");
for ( k = 0; k < ; k++)
{
int i, j, v1, v2;
scanf("%d%d", &v1, &v2);
//定位输入结点的位置
i = LocateVex(G, v1);
j = LocateVex(G, v2);
//指向该结点
ArcNode* p1 = (ArcNode*)malloc(sizeof(ArcNode));
p1->adjvex = j;//将输入结点的位置赋值给p1
//连接结点
p1->nextarc = [i].firstarc;//p1的下一边的位置为顶点的第一条依附指针
[i].firstarc = p1;//当前顶点的依附指针指向p1
//相互指向,无向网
ArcNode* p2 = (ArcNode*)malloc(sizeof(ArcNode));
p2->adjvex = i;
p2->nextarc = [j].firstarc;
[j].firstarc = p2;
}
}
//输出表
void print(ALGraph& G)
{
printf("\n");
printf("输出邻接表:\n");
ArcNode* p;
for (int i = 0; i < ; i++)
{
printf("顶点%d:\n", [i].date);
for (p=[i].firstarc;p;p=p->nextarc)
{
printf(" 连接边的下标位置:(%d)", p->adjvex);
}
printf("\n");
}
}
int main()
{
ALGraph G;
Create(G);
print(G);
return 0;
}