#include<stdio.h>
#include<malloc.h>
#define Max 50
//边表节点
typedef struct EdgeNode
{
int adjvex;//储存对应顶点的下标
int weight;//用于储存权值
struct EdgeNode * p;//指向下一个边表节点
}EdgeNode;
//顶点表节点
typedef struct VertexNode
{
char date;//数据
EdgeNode * p;//指向边表节点
}VertexNode;
//图节点
typedef struct Graph
{
VertexNode agjList[Max];//顶点表数组
int numVextexes,numEdges;//当前顶点数和边数
}Graph;
//创建图的邻接表结构
void GreateGraph(Graph * G)
{
int i,j,k;
EdgeNode * e;
printf("输入顶点数和边数");
scanf("%d %d",&G->numVextexes,&G->numEdges);
printf("输入顶点的信息:");
for(i=0;i<G->numVextexes;i++)//输入顶点信息
{
scanf("%c",&G->agjList[i].date);
G->agjList[i].p=NULL;
}
/*
1>利用头插法
2>因为无向图没有方向,所以创建边表节点的时候,要重复创建两次
并进行相反的操作
*/
for(k=0;k<G->numEdges;k++)//建立边表
{
printf("输入边(Vi,Vj)的下标i和j的值:");
scanf("%d %d",&i,&j);
e=(EdgeNode *)malloc(sizeof(EdgeNode));//动态分配空间来储存边表节点
e->adjvex=j;
e->p=G->agjList[i].p;
G->agjList[i].p=e;
e=(EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex=i;
e->p=G->agjList[j].p;
G->agjList[j].p=e;
}
}
无向图的邻接表储存
最新推荐文章于 2023-02-01 22:05:57 发布