赞
踩
/*
无向图的邻接表
输出结果
请输入待创建图的顶点数和边数:4 4
请输入第1个顶点信息:a
请输入第2个顶点信息:b
请输入第3个顶点信息:c
请输入第4个顶点信息:d
请输入第1条边的两个顶点对应的下标值:0 1
请输入第2条边的两个顶点对应的下标值:0 3
请输入第3条边的两个顶点对应的下标值:1 3
请输入第4条边的两个顶点对应的下标值:1 2
a (a,d) (a,b)
b (b,c) (b,d) (b,a)
c (c,b)
d (d,b) (d,a)
请按任意键继续. . .
*/
# include <stdio.h>
# include <stdlib.h>
# define MAX_VEX 100//最大顶点数
typedef char VertexType;
typedef int EdgeType;
//边表结点
typedef struct EdgeNode{
int adjvex;//邻接点域,存储对应顶点元素的下标
//EdgeType info;//储存权值,非网图则不需要
struct EdgeNode * next;//指针域,指向下一个邻接点
}EdgeNode;
//顶点表结点
typedef struct VertexNode{
VertexType data;//顶点数据域
EdgeNode * firstedge;//边表头结点指针
}VertexNode, AdjList[MAX_VEX];
typedef struct GraphAdjList{
AdjList adjlist;//顶点数组链接表
int VexNum, EdgeNum;// 顶点、边的个数
}Graph;
void CreateGraphAdjList(Graph * G);//创建图的邻接表
void PrintGraphAdjList(Graph G);//打印图的邻接表
int main(void)
{
Graph G;
CreateGraphAdjList(&G);
PrintGraphAdjList(G);
system("pause");
return 0;
}
//创建图的邻接表
void CreateGraphAdjList(Graph * G)
{
printf("请输入待创建图的顶点数和边数:");
scanf("%d %d", &G->VexNum, &G->EdgeNum);
for(int i = 0; i < G->VexNum; i++)
{
getchar();
printf("请输入第%d个顶点信息:", i+1);
scanf("%c", &G->adjlist[i].data);
G->adjlist[i].firstedge = NULL;
}
int index1, index2;
EdgeNode * pE;
for(int j = 0; j < G->EdgeNum; j++)
{
printf("请输入第%d条边的两个顶点对应的下标值:", j+1);
scanf("%d %d", &index1, &index2);
pE = (EdgeNode*)malloc(sizeof(EdgeNode));
pE->adjvex = index2;
pE->next = NULL;
pE->next = G->adjlist[index1].firstedge;
G->adjlist[index1].firstedge = pE;
pE = (EdgeNode*)malloc(sizeof(EdgeNode));
pE->adjvex = index1;
pE->next = NULL;
pE->next = G->adjlist[index2].firstedge;
G->adjlist[index2].firstedge = pE;
}
}
//打印图的邻接表
void PrintGraphAdjList(Graph G)
{
for(int i = 0; i < G.VexNum; i++)
{
printf("%c ", G.adjlist[i].data);
EdgeNode * p = G.adjlist[i].firstedge;
while(p)
{
printf("(%c,%c) ", G.adjlist[i].data, G.adjlist[p->adjvex].data);
p = p->next;
}
printf("\n");
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。