在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、编译器设计等领域。对于初学者来说,掌握图的基本表示方法是学习算法和数据结构的关键一步。
本文将带你从零开始,用C语言静态图结构的方式实现图的存储——特别是使用邻接矩阵(Adjacency Matrix)这一经典方法。即使你是编程小白,也能轻松理解!
“静态”意味着图的大小(顶点数量)在程序运行前就已经确定,不会动态改变。这与“动态图”(如使用链表或指针动态分配内存)相对。在C语言中,我们可以使用二维数组来实现静态图,这种方式简单、直观、访问速度快。
假设一个图有 n 个顶点,我们可以创建一个 n × n 的二维数组 adjMatrix。如果顶点 i 和顶点 j 之间有边,则 adjMatrix[i][j] = 1(对于无权图);否则为 0。如果是带权图,则存储对应的权重值。
这种表示法非常适合C语言图存储,因为数组在C中是基础且高效的。
下面是一个完整的C语言程序,演示如何定义、初始化并打印一个静态图:
#include <stdio.h>#define MAX_VERTICES 10 // 最大顶点数typedef struct { int vertices; // 实际顶点数量 int adjMatrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵} Graph;// 初始化图void initGraph(Graph* g, int n) { g->vertices = n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { g->adjMatrix[i][j] = 0; // 初始无边 } }}// 添加边(无向图)void addEdge(Graph* g, int u, int v) { if (u < g->vertices && v < g->vertices) { g->adjMatrix[u][v] = 1; g->adjMatrix[v][u] = 1; // 无向图对称 }}// 打印邻接矩阵void printGraph(Graph* g) { printf("邻接矩阵表示:\n"); for (int i = 0; i < g->vertices; i++) { for (int j = 0; j < g->vertices; j++) { printf("%d ", g->adjMatrix[i][j]); } printf("\n"); }}// 主函数int main() { Graph g; initGraph(&g, 4); // 创建4个顶点的图 // 添加边:0-1, 0-2, 1-2, 2-3 addEdge(&g, 0, 1); addEdge(&g, 0, 2); addEdge(&g, 1, 2); addEdge(&g, 2, 3); printGraph(&g); return 0;} 运行上述程序,你将看到如下输出:
邻接矩阵表示:0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0
优点:
缺点:
通过本教程,你已经掌握了C语言静态图结构的基本实现方式,学会了如何用邻接矩阵表示图。这是学习更复杂图算法(如DFS、BFS、Dijkstra等)的重要基础。
记住,图的邻接矩阵表示虽然简单,但在实际项目中要根据图的密度选择合适的数据结构。如果你处理的是稀疏图,可以考虑后续学习“邻接表”表示法。
希望这篇静态图实现教程对你有所帮助!动手敲一遍代码,你会理解得更深刻。
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125907.html