数据结构-图-C语言-邻接表
#include <stdio.h>
#include <stdlib.h>
#define Max 100
typedef int Vertex;
typedef int WeightType;
typedef struct GNode *pGNode;
struct GNode {
int nv;
int ne;
AdjList g;
};
typedef pGNode LGraph;
typedef struct ENode *pENode;
struct ENode {
Vertex v, w;
WeightType weight;
};
typedef pENode Edge;
struct VNode {
pAdjVNode firstEdge;
};
typedef VNode AdjList[Max];
typedef struct AdjVNode *pAdjVNode;
struct AdjVNode {
Vertex adjV;
WeightType weight;
pAdjVNode next;
};
LGraph createLGraph(int vertexNum){
LGraph graph;
Vertex v, w;
graph = (LGraph)malloc(sizeof(struct GNode));
graph->nv = vertexNum;
graph->ne = 0;
for (v = 0; v < vertexNum; v++)
graph->g[v].firstEdge = NULL;
return graph;
}
void insertEdge(LGraph graph,Edge edge) {
pAdjVNode newNode;
newNode = (pAdjVNode)malloc(sizeof(struct AdjVNode));
newNode->adjV = edge->w;
newNode->weight = edge->weight;
newNode->next = graph->g->firstEdge->next;
graph->g->firstEdge->next = newNode;
}
LGraph buildLGraph() {
LGraph graph;
int vertexNum;
scanf("%d", &vertexNum);
graph = createLGraph(vertexNum);
scanf("输入图的边数%d", &(graph->ne));
if (graph->ne != 0) {
for (int i = 0; i < graph->ne; i++) {
Edge edge = (Edge)malloc(sizeof(struct ENode));
scanf("输入边的起始点%d", &edge->v);
scanf("输入边的结束点%d", &edge->w);
scanf("输入边的权重%d", &edge->weight);
insertEdge(graph, edge);
}
}
}