首页 > 其他分享 >C 语言代码示例

C 语言代码示例

时间:2023-10-05 13:04:58浏览次数:43  
标签:Node struct 示例 int graph 代码 newNode adjacencyList 语言

以下是一个较为复杂的 C 语言代码示例,它演示了如何使用链表数据结构实现一个简单的图(Graph)数据结构,并实现图的深度优先搜索(DFS)算法:

#include <stdio.h>
#include <stdlib.h>

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

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

struct Node* createNode(int v) {
    struct Node* newNode = malloc(sizeof(struct Node));
    newNode->vertex = v;
    newNode->next = NULL;
    return newNode;
}

struct Graph* createGraph(int vertices) {
    struct Graph* graph = malloc(sizeof(struct Graph));
    graph->numVertices = vertices;
    graph->adjacencyList = malloc(vertices * sizeof(struct Node*));
    
    for (int i = 0; i < vertices; i++) {
        graph->adjacencyList[i] = NULL;
    }
    
    return graph;
}

void addEdge(struct Graph* graph, int src, int dest) {
    struct Node* newNode = createNode(dest);
    newNode->next = graph->adjacencyList[src];
    graph->adjacencyList[src] = newNode;
    
    newNode = createNode(src);
    newNode->next = graph->adjacencyList[dest];
    graph->adjacencyList[dest] = newNode;
}

void DFS(struct Graph* graph, int vertex, int* visited) {
    visited[vertex] = 1;
    printf("%d ", vertex);
    
    struct Node* adjList = graph->adjacencyList[vertex];
    while (adjList != NULL) {
        int connectedVertex = adjList->vertex;
        if (visited[connectedVertex] == 0) {
            DFS(graph, connectedVertex, visited);
        }
        adjList = adjList->next;
    }
}

int main() {
    int numVertices = 6;
    struct Graph* graph = createGraph(numVertices);
    
    addEdge(graph, 0, 1);
    addEdge(graph, 0, 2);
    addEdge(graph, 1, 3);
    addEdge(graph, 2, 4);
    addEdge(graph, 3, 4);
    addEdge(graph, 3, 5);
    
    int visited[numVertices];
    for (int i = 0; i < numVertices; i++) {
        visited[i] = 0;
    }
    
    printf("深度优先搜索结果:");
    DFS(graph, 0, visited);

    return 0;
}

上述代码实现了一个使用链表数据结构表示的简单无向图(undirected graph)数据结构,并展示了如何实现图的深度优先搜索(DFS)算法。在 main 函数中,我们创建了一个包含 6 个顶点的图,并添加了边连接这些顶点。然后,我们使用深度优先搜索来遍历这个图,并打印出遍历的结果。

请注意,这个例子对于初学者可能具有一定的复杂度,涉及到动态内存分配和链表数据结构的操作。实际编程中,根据需求选择适当的数据结构和算法是非常重要的。

标签:Node,struct,示例,int,graph,代码,newNode,adjacencyList,语言
From: https://blog.51cto.com/u_15964895/7711271

相关文章

  • 实验1_c语言输入输出和简单程序应用编程
    实验一1-1#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");......
  • Learning Hard C# 学习笔记: 3.C#语言基础
    前言由于最近工作开始重新使用了C#,框架也是.Net4.5,看了下,这本书是比较合适的,所以就重新学习了下,由于之前本人已有C#相关基础,所以不会所有内容都做笔记,只会对不熟悉或者比较重要的内容做笔记.3.2基础数据类型3.2.4枚举类型枚举类型属于值类型,用于定义一组命......
  • c语言代码练习17
    需求:判断用户输入的一个数字是否为一个素数。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidayue(int*pinput){inti=0;for(i=2;i<*pinput;i++){if(*pinput%i==0){printf("您输入的数字不是一个......
  • c语言代码练习--函数
    函数:一,概念:1,在计算科学中,子程序(英语:Subroutione,procedure,function,rotine,method.subprogram,callableunit),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其它代码,具备相对的独立性。2,一般会由输入参数并有返回值,提供对过程的封......
  • c语言代码练习16
    //计算a,b间的最大值#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intayue(inta,intb){if(a>b){returna;}else{returnb;}}intmain(){inta=10;intb=20;intmax=ayue(a,......
  • 408_C语言基础
    408_C语言基础学习内容掌握以下知识点足以应付408考试了:常量、变量、运算符、流程控制、函数、指针、结构体。变量变量其实只不过是程序可操作的存储区的名称。C中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上......
  • 实验1 C语言输入输出和简单程序编写
    1.试验任务1  task1.c//打印一个字符小人#include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");return0;} task1_1.c//在垂直方向上打印出两个小人#include<stdio.h>int......
  • C语言之预处理,动态库,静态库
    目录4.1c语言编译过程4.2include4.3define4.4选择性编译4.5静态库4.6动态库4.1c语言编译过程1:预编译将.c中的头文件展开、宏展开生成的文件是.i文件2:编译将预处理之后的.i文件生成.s汇编文件3、汇编将.s汇编文件生成.o目标文件4、链接将.o文件链接成目标文件......
  • 【Citrix篇】2-Citrix ADC/Gateway远程代码执行XSS漏洞修复方案
    、一、前言    最近我们根据修复了CVE-2023-3519漏洞,仍有部分安全厂商扫描出XSS漏洞,我们从400获悉该XSS漏洞不存在风险的,但是可拒绝请求,拦截掉。【Citrix篇】1-CitrixADC/Gateway远程代码执行漏洞CVE-2023-3519和升级方法二、漏洞详情    我们根据构建XSS语句,发现Citrix......
  • c语言代码练习15
    //使用togo跳转代码,阻止关机#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<string.h>intmain(){charinput[20]={0};system("shutdown-s-t60");printf("注意!注意!,您的电脑将在1分钟后关机,请输入:我是帅哥。才能取消关机。\n请输入:......