从上次写博客到现在好久了,Hexo 博客系统好像也不这么流行了,其实主要是没有写作后台,2026年在 AI 的帮助下,从新迁移这套主题到更流行的 Halo 博客系统,希望能够继续博客的写作。 不过从今年起,这个博客可能不只有精雕细琢的大作,也有一些碎碎念、吐槽以及个人观点。先记录下来,比什么都重要。
高树靡阴,独木不林。
我们知道如何构建一个图的数据结构,那么现在,我们看看如何根据一棵图的图形,创建一张图到内存中去。
#define MAX_VEX_NUM 50 //最大的容量暂定为50
typedef enum {DG, UDG} GraphType; //选择有向图还是无向图
typedef struct {
char vexs[MAX_VEX_NUM]; //一维数组存储顶点
int arcs[MAX_VEX_NUM][MAX_VEX_NUM]; //二维数组(邻接矩阵)存储边
int vexnum, arcnum; //记录顶点的数量和边的数量,等下用作循环判断条件
GraphType type; //记录图得类型
} MGraph;
数据结构中
学了那么多图的知识,是时候动手设计一下图的存储结构了,图跟线性表、树有那么大得差别,所以图的数据结构要复杂很多。
我们先回忆一下线性表和树得存储结构
那么图呢?
我们观察下面的四张图

前面我们基本讲了什么是图结构,以及顶点、边和弧之间不同状态的特殊图结构,我们今天继续,看看这些顶点、边和弧之间的关系。
我们来讲讲顶点和边的一些关系
我们说,如果存在一个无向图,G(V,E)
邻接点(Adjacent)相邻接,不是连接!。
终于,我们迎来了新的数据结构,图结构。之前的线性表,主要是一对一的关系,一个元素和另一个元素的关系。树结构,主要层与层之间一对多的关系,即一个结点可以有 N 个子树,N 个子树也只对应一个双亲结点。那么大家也应该猜到了,图解决的是多对多的数据关系。

(顶点1有一个环的图结构)
**图(Graph):**是有顶点的又穷非空集合和顶点之间的边集合组成。
未完待续…
未完待续…
上一节我们发现,树、森林和二叉树之间竟然有这么多有趣的关联,前根和后根遍历结果竟然都可以跟二叉树相同。二叉树竟然这么的独特,今天我们就来看看,如何打造一棵完美二叉树!

我们在使用二叉树的时候,会遇到类似这样的问题
要弄清楚这个问题,我先首先要弄清楚刚才哪些加了数字的结点是什么。