图的邻接表创建与遍历(C语言)

图的创建和遍历 C语言 深度优先遍历采用了递归算法,广度优先遍历采用了非递归算法。参考了清华大学出版社的数据结构教材。 在VS C++2010环境下测试通过 如要在VC6.0环境下运行,需将头文件“stdafx.h”去除 立即下载

数据结构

 三个结构体,边,顶点,图。

typedef struct Side//边
{
    int toVertex;//边指向的点
    struct side *next;
}Side,*sLink;
typedef struct Vertex//顶点
{
    int data;
    sLink first;//第一个边
}Vertex,AdjList[20];
typedef struct Graph//图
{
    AdjList adj;//顶点数组,注意不是指针,用.不用->
    int n,v;//顶点数,边数
}Graph,*gLink;

创建

先顶点,再边。边用头插法,最后插的接在first上

void createGraph(gLink g)
{
    int n,v,data;
    printf("请输入顶点数与边数");
    scanf("%d %d",&n,&v);
    g->n = n;
    g->v = v;
    int i;
    for(i=0;i<n;i++)
    {
        printf("请输入顶点%d权值",i);
        scanf("%d",&data);
        g->adj[i].data = data;
        g->adj[i].first = NULL;
    }
    printf("请输入边信息");
    int v1,v2;
    for(i=0;i<v;i++)
    {
        scanf("%d %d",&v1,&v2);
        sLink s = (sLink)malloc(sizeof(Side));
        s->toVertex = v2;
        s->next = g->adj[v1].first;
        g->adj[v1].first = s;
    }
}

遍历

第一个for初始化vidited,第二个for调用BFS或DFS。考虑到图可能不连通,所以用到第二个for。

void travel(gLink g)
{
    int visited[g->n];
    int i;
    for(i=0;i<g->n;i++)
    {
        visited[i]=0;
    }
    for(i=0;i<g->n;i++)
    {
        if(!visited[i])
        {
            //DFS(g,visited,i);
            BFS(g,visited,i);
        }
    }
}

深度优先搜索

递归

void DFS(gLink g,int *visited,int i)
{
    visited[i] = 1;
    printf("%-5d",g->adj[i].data);
    sLink s = g->adj[i].first;
    while(s)
    {
        if(!visited[s->toVertex])
        {
            DFS(g,visited,s->toVertex);
        }
        s = s->next;
    }
}

广度优先搜索

用队列,类似于树的层序遍历

void BFS(gLink g,int *visited,int i)
{
    Vertex queue[20];//队列
    int rear=0,front=0;
    queue[rear++] = g->adj[i];
    visited[i]=1;
    while(front!=rear)
    {
        Vertex v = queue[front++];//出队
        printf("%-5d",v.data);
        sLink s = v.first;
        while(s)
        {
            if(!visited[s->toVertex])
            {
                queue[rear++] = g->adj[s->toVertex];//入队
                visited[s->toVertex]=1;
            }
            s=s->next;
        }
    }
}

主函数

int main()
{
    gLink g = (gLink)malloc(sizeof(Graph));
    createGraph(g);
    travel(g);
    return 0;
}




C#与硬件开发入门:从零开始搭建你的第一个硬件项目 《C#硬件开发入门指南》摘要:本文介绍了使用C#进行硬件开发的基础知识,重点讲解了通过串口通信控制硬件设备的实现方法。内容包括:C#硬件开发优势、必备基础知识、环境准备步骤,并提供了一个完整的串口数据读取示例代码。文章还给出了进阶学习建议和常见问题解决方案,帮助开发者快速掌握C#与硬件设备通信的基本技能,为进一步开发物联网、工业控制等应用打下基础。 阅读详情

相关推荐

搭建Java集成开发环境IntelliJ IDEA

package net.huawei.p01.t02;/** * 功能:输出一条信息 * 作者:华卫 * 日期:2022年03月24日 */ public class HelloWorld { public static void main(String[] args) { // arguments System.out.println("Hello Java World~"); } }

qq_67308063的博客 475

数据结构---图的邻接表(创建、打印、深度优先遍历,广度优先遍历C语言)

当一个图为稀疏图时,使用邻接矩阵会浪费大量存储空间。 邻接表法结合了顺序存储和链式存储方法,减少了不必要的浪费。 参照博文:https://blog.youkuaiyun.com/qq_39630587/article/details/77409869 邻接表 1)对图G的每个顶点vi建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图则是以顶点vi为尾的弧)。这个单链表就称为顶点v...

小陆同学LLR的博客 3万+

ESP32天线阵列实现Wi-Fi空间成像与无直视定位

Wi-Fi信道状态信息(CSI)是OFDM系统中表征多径传播特性的基础物理层参数,其复数值包含幅度与相位,可反映无线环境的空间特征。基于CSI的射频感知技术,通过提取子载波级信道响应,结合阵列信号处理,实现到达角(AoA)估计与深度映射,本质是将通信链路重构为空间域传感器。该技术无需专用雷达硬件,具备低成本、被动式、隐私友好等工程优势,在室内定位、行为识别、仓储导航等场景具有广泛落地价值。本文聚焦ESP32平台,详解多芯片相位同步、CSI零拷贝采集、嵌入式MUSIC算法及信道图谱轻量化部署等关键实现。

weixin_30632267的博客 236

图的邻接表创建以及遍历

#define max_vertex_num 100 //该图可以为维护最大的结点个数。 typedef struct Arcnode { int adjvex;//该弧所指向的顶点的位置 struct Arcnode *nextarc; char *info; }Arcnode; typedef struct Vnode { char data; Arcnode *fi

MyprimePlace 2662

手把手教你用DCA1000EVM解析IWR6843毫米波雷达数据(附MATLAB代码)

本文提供了一份详尽的实战指南,手把手教你使用DCA1000EVM采集并解析TI毫米波雷达IWR6843的原始数据。内容涵盖硬件连接配置、mmWave Studio参数设置、LVDS数据流结构解析,并附有核心MATLAB代码,详细演示了从原始二进制文件到距离-速度谱的信号处理全链路,帮助开发者快速掌握数据解析与处理的关键步骤。

terraform7cloud的博客 227

使用BK3432芯片进行蓝牙开发的详细指南:编程手册与实际应用

BK3432是一款蓝牙4.2双模式芯片,支持蓝牙低功耗(BLE)和经典蓝牙(BR/EDR)模式。它集成了高性能的RF收发器、基带处理器、ARM9E内核、丰富的功能外设单元,并支持BLE应用的可编程协议和概要文件。蓝牙版本:4.2数据速率:最高支持2Mbps内核:ARM9ERF收发器:高性能、低功耗外设单元:包括UART、SPI、I2C、GPIO等功耗:超低功耗设计,适合电池供电的应用。

m0_57781768的博客 4446

7-加权无向图的遍历(DFS、BFS)和最小生成树(Prim、Kruskal)

无向图的遍历 DFS 算法思想 深度优先搜索思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 算法特点:栈 深度优先搜索是一个递归的过程。首先,选定一个出发点后进行遍历,如果有邻接的未被访问过的节点则继续前进。若不能继续前进,则回退一步再前进,若回退一步仍然不

salted___fish的博客 3241

ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤

本文介绍ArcGIS 10.2中地理配准的完整操作流程,涵盖加载扫描地图、启用地理配准工具条、添加控制点(含经纬度输入与坐标系统选择)、均匀分布控制点以提升精度,并最终通过“更新地理配准”完成栅格数据的空间定位。强调控制点数量、分布及坐标系匹配的重要性,附带实验数据下载链接与获取方式,适用于初学者掌握扫描矢量化前的关键几何校正技能。

智慧空间实验室 9万+

C语言建立有向图的邻接表及其遍历操作

C语言建立有向图的邻接表及其遍历操作 1 /*C语言建立有向图的邻接表及其遍历操作*/ 2 #include"stdio.h" 3 #include"stdlib.h" 4 //图的邻接矩阵储存结构 5 typedef char elemtype; 6 #define maxsize 10 7 #define queuesize 100 8 //边结点的类型定义 9...

qq_41502099的博客 1万+

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

【C语言】邻接表的创建、深度遍历

测试例子:天勤P188 算法步骤: (1)定义邻接表的数据结构,分为三部分: 边结点:边结点的编号、指向下一条边的指针变量; 顶点:顶点信息(字符型数据)、指向顶点第一条边的指针变量; 邻接表:顶点数组、顶点个数n、边数e; (2)构造一个函数创建邻接表,形参为AGraph* (3)读取顶点个数n和边数e (4)初始化顶点数组 (5)根据边数,逐个读取每一条边,如果是无向图,则读进...

Read by heart 491

RK3568平台开发系列讲解:Linux wifi的调试

查询结果中state为ENABLE,表示hostapd程序启用成功。首先查看设备是否存在。

内核笔记 165

c语言邻接表的构建_图的邻接表创建与遍历(C语言)

数据结构三个结构体,边,顶点,图。typedef struct Side//边{int toVertex;//边指向的点struct side *next;}Side,*sLink;typedef struct Vertex//顶点{int data;sLink first;//第一个边}Vertex,AdjList[20];typedef struct Graph//图{AdjList adj;...

weixin_39637700的博客 500

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构 c语言实现图的邻接表创建及深度与广度优先遍历

#include <stdio.h> #include <stdlib.h> #define MVNUM 5 //最多的顶点数 typedef char VerTexType; //顶点元素的类型 VerTexType vexs[MVNUM]={'a','b','c','d','e'}; //顶点数组 int visiteds[5]={0,0,0,0,0}; //深度and广度优先遍历的标记数组 typedef struct ArcNode //边节点 { int...

iamchenchenchen的博客 2487

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据结构【完整代码】之(C语言实现【图的存储创建遍历】邻接矩阵与邻接表)

一、邻接矩阵 包含四个文件的代码和一张测试效果图: AdjacencyMatrix.h文件: 构建邻接矩阵的存储结构与邻接矩阵的创建函数 DBFSAdjacencyMatrix.h文件: 构建邻接矩阵的深度优先遍历与广度优先遍历函数 StackAndQueue.h文件: 应广度优先遍历所需,提供队列的基本操作 test.cpp文件: 用于测试 效果图:(如下) 效果图: AdjacencyMatrix.h文件: #include<stdio.h> #include<stdlib.h&

Zhou_LC的博客 2169

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

有向图的邻接表的建立,深度遍历并输出(c语言实现有向网)

图的邻接表表示法(c语言实现有向网) [ ]为方便理解。 首先先为图的邻接表画一个模型, 邻接表可以分为两部分(1.表头节点,2.弧节点) 如上图,因为写的代码是有向网,所以选择上图,首先在脑海里建立一个模型 代码如下 #include<stdio.h> #include<stdlib.h> //*邻接表用两部分表示 1顶点节点包含(data firstarc) 2弧...

weixin_43904021的博客 8820

数据结构(C语言)图的基本操作及应用

数据结构(C语言)图的基本操作及应用 图的基本操作及应用 用邻接表法创建无向图 以邻接表形式打印无向图 深度遍历无向图并打印 利用队列知识实现广度遍历无向图并打印 取各顶点在表中序号 头文件及数据 头文件定义及所需数据 #include <iostream> using namespace std; #define MAX 100 //最大顶点数 图存储结构 边...

qq_46043634的博客 1万+

对于图的遍历的四种问题

图建立,输入示例:input the number for vexnum and arcnum:8 9input8char for vexs(use -enter- to change):abcdefghinput9arc(char -enter- char -enter- weigh):0:ab111:ac112:bd113:be114:dh235:eh116:c

Robin's Log 4310

图的邻接表存储 深度优先遍历 广度优先遍历 C语言实现

<br />ALGraph.h<br />#pragma once #include "Queue.h" /************************************************************************/ /* 图的邻接表存储结构 */ /*****************************************************

8555

C语言实现图的遍历

C语言实现图的遍历 //图的基本运算算法 #include <stdio.h> #include <malloc.h> #define INF 32767 //定义∞ #define MAXV 100 //最大顶点个数 typedef char InfoType; //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息 } VertexType; //顶点类型

m0_46574072的博客 1388

C语言实现图的相关算法

简介: 该程序主要是用C语言来实现与图相关的算法,目的在于加深对于图这种数据结构的理解以及探索其应用场景。 程序中涉及的有向图如下: /*-------------------------------------------- 功能:关于图的存储及操作算法: 1.根据有向图的邻接矩阵创建该图的邻接表; 2.打印有向图的邻接表; 3.销毁一个图的邻接表; 4.有向图的邻接表的深度优先遍历和广度优先...

田野麦子 4242

有向图的遍历

邻接表 有向图邻接表的建立初始化 #include<stdio.h> #include<stdlib.h> #include<string.h> #define Maxsize 20 #define MAX_VEX 20 #define Vex 4 #define Arc 4 typedef enum{ DG=1,AG,WDG,WAG//分别为无向图,有向图,...

scarlet witcher的博客 3843

邻接表(C语言)

本文介绍了邻接表存储结构及其实现。邻接表通过数组存储顶点,链表存储相邻顶点,有效解决了稠密图邻接矩阵存储密度低的问题。文章详细阐述了邻接表的结构特点(出度简单、入度难),并提供了代码实现方案,包括创建图、初始化、添加边等核心操作。同时介绍了深度优先搜索(DFS)和广度优先搜索(BFS)两种遍历算法,重点讲解了它们的实现逻辑和关键步骤。代码实现部分包含头文件定义、图结构创建、边添加以及遍历算法等完整实现,为图的邻接表存储提供了完整的解决方案。

2501_92907982的博客 943

C语言|图的邻接表实现

C语言|图的邻接表实现 本来想写一篇完整的文章的,但编着编着发现好多示例都没有……身边也没有什么参考资料,细讲还要花图可能还画得不好看。总之直接贴代码了,vs2012可运行、Dev c++可运行,非100%原创,一半代码都是现成的,不过我还是全都理解了,如果有疑问请在评论区留言 代码如下 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME 3 // 顶点字符串的

qq_41501809的博客 424

邻接表和邻接矩阵在深度遍历中的相互转换

1:概念 邻接矩阵:就是一个一维数组存储图中订单顶点的信息, 用一个二维数组存储图中边的信息,存储顶点之间邻接关系的二维数组称为邻接矩阵。 矩阵元素为: 邻接表:对图中每个顶点Vi简历一个单链表,第i个单链表中的节点表示依附于顶点Vi的边,这个单链表就称为顶点Vi的边表。边表的头指...

chuangwei1581的博客 448
下一篇: 无向图的邻接矩阵创建与遍历
cjavacjavacjava
博客等级 码龄10年 9粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值