用邻接表表示图

简介: 用邻接表表示图
 1 //用邻接表表示图
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4  
 5 #define DataType char
 6 #define MaxVertexNum 20
 7 #define Vertex int
 8 #define WeightType int
 9 typedef struct GNode *PtrToGNode;
10 struct  GNode
11 {
12     int Nv;            //顶点数
13     int Ne;            //边数
14     AdjList G;        //邻接表
15 };
16  
17 struct ENode{
18     Vertex v1, v2;
19     int weight;
20 };
21  
22 typedef struct ENode* Edge;
23  
24 typedef PtrToGNode LGraph;    //以邻接表方式存储的图类型
25  
26 typedef struct Vnode {
27     PtrToAdjVNode FirstEdge;
28     DataType Data; //存顶点的数据
29 }AdjList[MaxVertexNum];
30  
31 typedef struct AdjVNode *PtrToAdjVNode;
32 struct AdjVNode {
33     Vertex AdjV;            //邻接点下标
34     WeightType Weight;        //边的权重
35     PtrToAdjVNode Next;        
36 };
37  
38 //初始化一个有VertexNum个顶点但没有边的图
39  
40 LGraph CreateGraph(int VertexNum)
41 {
42     Vertex v;
43     LGraph Graph;
44     Graph = (LGraph)malloc(sizeof(struct GNode));
45     Graph->Nv = VertexNum;
46     Graph->Ne = 0;
47  
48     for (v = 0; v < Graph->Nv; v++)
49         Graph->G[v].FirstEdge = NULL;
50  
51     return Graph;
52 }
53  
54 void InsertEdged(LGraph Graph, Edge E)
55 {
56     PtrToAdjVNode NewNode;
57     NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
58     NewNode->AdjV = E->v2;
59     NewNode->Weight = E->weight;
60  
61     //将v2插入v1的表头
62     NewNode->Next = Graph->G[E->v1].FirstEdge;
63     Graph->G[E->v1].FirstEdge = NewNode;
64  
65     //若是无向图,还要插入边<v2, v1>
66     //为v1建立新的邻接点
67     NewNode = (PtrToAdjVNode)malloc(sizeof(struct AdjVNode));
68     NewNode->AdjV = E->v1;
69     NewNode->Weight = E->weight;
70     //将v1插入v2的表头
71     NewNode->Next = Graph->G[E->v2].FirstEdge;
72     Graph->G[E->v2].FirstEdge = NewNode;
73 }
相关文章
|
9天前
|
存储 人工智能 算法
Java数据结构与算法:邻接矩阵和邻接表
Java数据结构与算法:邻接矩阵和邻接表
|
1月前
|
存储
邻接表详解
邻接表详解
16 0
|
1月前
|
存储 算法
有向图和无向图的表示方式(邻接矩阵,邻接表)
有向图和无向图的表示方式(邻接矩阵,邻接表)
79 0
|
7月前
|
存储 机器学习/深度学习 人工智能
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
1073 0
|
11月前
|
存储
图操作之邻接矩阵与邻接表的深度优先遍历
图操作之邻接矩阵与邻接表的深度优先遍历
131 0
拓扑排序(邻接表实现)
拓扑排序(邻接表实现)
148 0
拓扑排序(邻接表实现)
|
机器学习/深度学习
有向图,无向图的邻接矩阵和邻接表模板
有向图,无向图的邻接矩阵和邻接表模板
160 0
有向图,无向图的邻接矩阵和邻接表模板
|
算法
最小生成树:Kruskal算法(邻接表+最小堆+并查集)
最小生成树:Kruskal算法(邻接表+最小堆+并查集)
224 0
最小生成树:Kruskal算法(邻接表+最小堆+并查集)
邻接矩阵
数据结构中无向图邻接矩阵的存储
邻接矩阵