「图-深度&广度优先遍历(邻接矩阵)」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

#define MAXVEX 100 // 最大顶点数
// #define INFINITY 65535 // 用整数最大值代表无穷大

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 图的邻接矩阵存储结构
typedef struct {
VertexType vex[MAXVEX]; // 顶点数组
EdgeType edge[MAXVEX][MAXVEX]; // 边权值的二维数组
int numVex, numEdge; // 顶点数、边数
} AMGraph;

/*------------------------- 图-邻接矩阵结构定义 ------------------------*/


bool visited[MAXVEX]; // 标记数组

重点

深度优先:类似于树的前序遍历

广度优先:类似于树的层序遍历(借助队列实现)

More

「图-邻接表结构」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*---------------------------- 图-邻接表结构定义 -----------------------------*/

#define MAXVEX 100 // 最大顶点数

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 首先定义边表节点,后续顶点表节点需要用
typedef struct edgeNode {
int adjvex; // 存储某顶点的邻接点在顶点表中的下标
EdgeType weight; // 存储权值
struct edgeNode * next;
} EdgeNode;

// 定义顶点表节点
typedef struct vertexNode {
VertexType data;
EdgeNode * firstEdge;
} VertexNode;

// 有了顶点表节点构成的数组,即确定了邻接表
// 类似于有了头指针,即确定了链表一样
typedef VertexNode AdjList[MAXVEX]; // 在这里为顶点表分配了内存,就无需动态分配了

// 最终定义图的邻接表结构
typedef struct {
AdjList adjList;
int numVex, numEdge;
} ALGraph;

//上面可以改为:
// typedef struct {
// VertexNode adjList[MAXVEX];
// int numVex, numEdge;
// } ALGraph;

/*---------------------------- 图-邻接表结构定义 -----------------------------*/

More

「图-邻接矩阵结构」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

#define INFINITY 65535 // 用整数最大值代表无穷大
#define MAXVEX 100 // 最大顶点数

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 图的邻接矩阵存储结构
typedef struct {
VertexType vex[MAXVEX]; // 顶点数组
EdgeType edge[MAXVEX][MAXVEX]; // 边权值的二维数组
int numVex, numEdge; // 顶点数、边数
} AMGraph;

/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

More

「二叉树-链式结构」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*------------------------- 二叉树链式结构定义 ------------------------*/

typedef char TElemType;

// 二叉链表节点
typedef struct biTNode {
TElemType data;
struct biTNode * pLChild;
struct biTNode * pRChild;
} BiTNode, *pBiTNode;

// 定义二叉树结构
// 二叉树只要有一个头指针即可确定,与链表定义相同
typedef pBiTNode LinkBiTree;

/*------------------------- 二叉树链式结构定义 ------------------------*/

More

资源共享 持续更新中。。。

前言

  1. 以下资料都是用阿里云盘存储的,我个人也从百度网盘转移到了阿里云盘。因为它下载不限速,可以节省你的时间,如果你还没有阿里云盘,建议先注册个账号。注册链接: https://pages.aliyundrive.com/mobile-page/web/beinvited.html?code=98ad476

  2. 以下所有类别资料一直处于更新中,但是微信公众号文章一旦发布就无法更改,所以建议你将该篇文章收藏,然后点击最下方的「阅读原文」跳转到我发布在个人网站的页面就可以看到最近更新的内容了。

More

「队列-链式结构」C语言实现

链式队列示意图

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*------------------------- 链式队列结构定义 ------------------------*/

typedef int ElemType;

// 定义链式节点的数据类型
typedef struct node {
ElemType data;
struct node * pNext;
} Node, *pNode;

// 利用链式节点构造链式队列的数据类型
typedef struct linkqueue {
pNode pFront;
pNode pRear;
} LinkQueue, *pLinkQueue;

/*------------------------- 链式队列结构定义 ------------------------*/

More