c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

c语言图的创建

刘姿婷 2023-09-23编程经验
前言图是一种重要的数据结构,用于表示一组对象之间的关系。在C语言中,可以使用邻接矩阵或邻接表来实现图。邻接矩阵使用二维数组来表示节点之间的连接关系,而邻接表使用链表来存储每个节

前言

图是一种重要的数据结构,用于表示一组对象之间的关系。在C语言中,可以使用邻接矩阵或邻接表来实现图。邻接矩阵使用二维数组来表示节点之间的连接关系,而邻接表使用链表来存储每个节点的邻居节点。

邻接矩阵表示图

邻接矩阵是一种简单且直观的图表示方式。假设有一个无向图,其中顶点的数量为V。我们可以使用一个二维数组来表示这个图,该数组的大小为VxV。数组的每个元素代表图中两个顶点之间是否存在边。如果有边,则元素的值为1;如果没有边,则元素的值为0。

#define MAX_VERTICES 10

int adjacencyMatrix[MAX_VERTICES][MAX_VERTICES];

void createGraph(int vertices) {
    // 初始化邻接矩阵
    for (int i = 0; i < vertices; i++) {
        for (int j = 0; j < vertices; j++) {
            adjacencyMatrix[i][j] = 0;
        }
    }
    
    // 添加边
    // ...
}

int main() {
    int vertices = 6; // 图中顶点的数量
    createGraph(vertices);
    
    // ...
    return 0;
}

上面的代码展示了如何使用邻接矩阵来创建一个图。首先,通过 createGraph 函数初始化了邻接矩阵,将所有元素的值设为0。然后,你可以根据需要添加边的信息。注意,上面的代码中,邻接矩阵的大小被定义为 MAX_VERTICES,你可以根据实际情况进行调整。

邻接表表示图

邻接表是另一种常用的图表示方式。它使用链表来存储每个节点的邻居节点。每个节点对应一个链表,该链表存储与该节点相邻的所有节点。

#include 
#include 

typedef struct Node {
    int vertex;
    struct Node* next;
} Node;

typedef struct Graph {
    int numVertices;
    Node** adjacencyList;
} Graph;

Node* createNode(int vertex) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (newNode == NULL) {
        // 内存分配失败
        return NULL;
    }
    newNode->vertex = vertex;
    newNode->next = NULL;
    return newNode;
}

Graph* createGraph(int numVertices) {
    Graph* graph = (Graph*)malloc(sizeof(Graph));
    if (graph == NULL) {
        // 内存分配失败
        return NULL;
    }
    graph->numVertices = numVertices;
    
    graph->adjacencyList = (Node**)malloc(numVertices * sizeof(Node*));
    if (graph->adjacencyList == NULL) {
        // 内存分配失败
        return NULL;
    }
    
    // 初始化邻接表
    for (int i = 0; i < numVertices; i++) {
        graph->adjacencyList[i] = NULL;
    }
    
    return graph;
}

void addEdge(Graph* graph, int src, int dest) {
    // 添加边的逻辑
    // ...
}

int main() {
    int numVertices = 6; // 图中顶点的数量
    Graph* graph = createGraph(numVertices);
    
    // 添加边的操作
    // ...
    
    // ...
    return 0;
}

上述代码展示了如何使用邻接表来创建一个图。首先,节点的结构体定义为 Node,图的结构体定义为 Graph。通过 createNode 函数创建一个新节点,并通过 createGraph 函数创建一个新图。然后,你可以根据需要使用 addEdge 函数添加边的信息。

总结

本文简单介绍了使用C语言创建图的基本概念和实现方法。邻接矩阵和邻接表是两种常见的图表示方式,可以根据具体需求选择使用。在实际应用中,图的创建和操作可能更加复杂,但本文提供的示例代码可以作为一个起点,帮助你理解并实现图的基本功能。

文章评论