数据结构:
1 typedef struct ArcNode{
2 int adjvex; //该弧所指向的顶点位置
3 struct ArcNode* next; //指向下一条弧的指针
4 } ArcNode;
5
6 typedef struct VNode {
7 int data; //顶点信息,标号,int类型
8 ArcNode* first; //指向第一条关联弧
9 } VNode, AdjList[MAX_VERTEX_NUM];
10
11 typedef struct {
12 AdjList vertices; //邻接表
13 int vexnum, arcnum; //顶点和弧的个数
14 }AdjListGraph;

上图顶点集:

举例:
将邻接表示的图转为邻接矩阵(无向无权图)

1 #include <iostream>
2 using namespace std;
3
4 #define MAX_VERTEX_NUM 10 //最大顶点数
5 #define MAX_ARCNODE_NUM 10 //最大边数
6
7 typedef struct ArcNode{
8 int adjvex; //该弧所指向的顶点位置
9 struct ArcNode* next; //指向下一条弧的指针
10 } ArcNode;
11 typedef struct VNode {
12 int data; //顶点信息,标号,int类型
13 ArcNode* first; //指向第一条关联弧
14 } VNode, AdjList[MAX_VERTEX_NUM];
15 typedef struct {
16 AdjList vertices; //邻接表
17 int vexnum, arcnum; //顶点和弧的个数
18 }AdjListGraph; //邻接表
19
20 void showInMat(AdjListGraph alg) {
21 int adjList[MAX_ARCNODE_NUM][MAX_ARCNODE_NUM];
22 for (int i = 0; i < alg.vexnum; i++) {
23 for (int j = 0; j < alg.vexnum; j++)
24 adjList[i][j] = 0;
25 }
26 ArcNode *temp;
27 for (int i = 0; i < alg.vexnum; i++)
28 {
29 temp = alg.vertices[i].first;
30 while (temp != NULL) {
31 adjList[i][temp->adjvex] = 1;
32 temp = temp->next;
33 }
34 }
35 for (int i = 0; i < alg.vexnum; i++) {
36 for (int j = 0; j < alg.vexnum; j++)
37 cout << adjList[i][j] << '\t';
38 cout << endl << endl;
39 }
40 }
41 int main()
42 {
43 AdjListGraph alg;
44 alg.vexnum = 5; //顶点0,1,2,3,4
45 alg.arcnum = 4; //弧数:4
46 alg.vertices[0].data = 0;
47 alg.vertices[1].data = 1;
48 alg.vertices[2].data = 2;
49 alg.vertices[3].data = 3;
50 alg.vertices[4].data = 4;
51
52 ArcNode an[8];
53 an[0].adjvex = 1;
54 an[0].next = NULL;
55 alg.vertices[0].first = an;
56 an[1].adjvex = 0;
57 an[2].adjvex = 2;
58 an[3].adjvex = 3;
59 an[1].next = &an[2];
60 an[2].next = &an[3];
61 an[3].next = NULL;
62 alg.vertices[1].first = &an[1];
63 an[4].adjvex = 1;
64 an[5].adjvex = 4;
65 an[4].next = &an[5];
66 an[5].next = NULL;
67 alg.vertices[2].first = &an[4];
68 an[6].adjvex = 1;
69 an[6].next = NULL;
70 alg.vertices[3].first = &an[6];
71 an[7].adjvex = 2;
72 an[7].next = NULL;
73 alg.vertices[4].first = &an[7];
74
75 showInMat(alg);
76 return 0;
77 }
