【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录

  • 1. 引言
  • 2. 邻接表表示图的原理
    • 2.1 有向权图
    • 2.2 无向权图
    • 2.3 无向非权图
    • 2.1 有向非权图
  • 3. 实验内容
    • 3.1 实验题目
      • (一)数据结构要求
      • (二)输入要求
      • (三)输出要求
    • 3.2 算法实现
  • 4. 实验结果

1. 引言

  图是一种常见的数据结构,用于表示对象之间的关系。在图的表示方法中,邻接表是一种常用的形式,特别适用于稀疏图。

本实验将介绍如何使用邻接表表示图,并通过C语言实现图的邻接表创建。

2. 邻接表表示图的原理

  邻接表是一种图的表示方法,其中每个顶点都与一个链表相关联,链表中包含了与该顶点相邻的所有顶点。对于有向图,邻接表中的链表表示了每个顶点的出边。
  在邻接表中,顶点由一个结构体表示,包含顶点的名称(或编号)以及指向与该顶点相邻的第一个顶点的指针。每个相邻的顶点由一个链表节点表示,包含相邻顶点的编号以及指向下一个相邻顶点的指针。

2.1 有向权图

在这里插入图片描述

2.2 无向权图

在这里插入图片描述

2.3 无向非权图

在这里插入图片描述

2.1 有向非权图

在这里插入图片描述

3. 实验内容

3.1 实验题目

  将邻接矩阵存储转换为邻接表存储

(一)数据结构要求

  邻接表中的顶点表用Head 数组存储,顶点表中元素的两个域的名字分别为 VerNameAdjacent,边结点的两个域的名字分别为 VerAdjlink。边链表中的边结点按照顶点序号从小到大的顺序存储。

(二)输入要求

{0,1,1,1,1,0,0},
{0,0,1,1,0,0,0},
{1,0,0,0,0,0,0},
{0,0,1,0,0,0,0},
{0,0,0,0,0,1,1},
{0,0,0,0,0,0,1},
{0,0,0,0,0,0,0}

(三)输出要求

按照顶点编号从小到大的顺序,依次输出每个顶点的边链表。形如:
“顶点 0 的边链表为:1->2->3->4->5->6->7->8”

3.2 算法实现

#include<stdio.h>
#include<stdlib.h>
#define N 7
int A[N][N]={{0,1,1,1,1,0,0},{0,0,1,1,0,0,0},{1,0,0,0,0,0,0},{0,0,1,0,0,0,0},{0,0,0,0,0,1,1},{0,0,0,0,0,0,1},{0,0,0,0,0,0,0}
};
typedef struct P{int VerAdj ;struct P *link;
}P;
typedef struct Q{int VerName;P *Adjacent;
}Q;
typedef struct{Q Head[20];
}Graph;
void Create(Graph *g)
{int i,j,n,t;for(i=0;i<N;i++){g->Head[i].VerName=i;g->Head[i].Adjacent=NULL;P *p=(P*)malloc(sizeof(P));t=0;for(j=0;j<N;j++){if(A[i][j]){if(t==0){//printf("%d&%d ",A[i][j],j);g->Head[i].Adjacent=p;p->VerAdj =j;p->link=NULL;t=1;}else{//printf("%d&%d ",A[i][j],j);P *q=(P*)malloc(sizeof(P));q->VerAdj =j;q->link=NULL;p->link=q;p=q;}}}}
}
void Output(Graph g)
{int i;for(i=0;i<N;i++){printf("顶点%d的边链表为:",i);P *p=g.Head[i].Adjacent;while(p){printf("%d",p->VerAdj );p=p->link;if(p) printf("—>");}printf("\n");}
}
int main()
{Graph g;Create(&g);Output(g);
}

4. 实验结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js解决输出中文乱码问题

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

shell脚本循环语句

目录 一. 循环语句 1. 循环条件 2. 循环次数 3. 循环命令区别 4. for 循环 ①. 第一种语法 ②. 第二种语法 5. while 循环 6. until 循环 二. 跳出循环 1. break 结束循环 2. continue 结束循环 3. exit 结束循环 三. 补充 1. 偶数的表示 2. 奇数的表示 一. 循环…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

用Python进行数据分析:探索性数据分析的实践与技巧(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

死锁是什么?死锁是如何产生的?如何破除死锁?

1. 死锁是什么 多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 2. 死锁的三种典型情况 一个线程, 一把锁, 是不可重入锁, 该线程针对这个锁连续加锁两次, 就会出现死锁. 两个线程…

通过JMeter压测结果来分析Eureka多种服务下线机制后的服务感知情况

文章目录 前言1. Eureka-Server的设计2. EurekaRibbon感知下线服务机制3.服务调用接口压测模型4.Eureka几种服务下线的方式4.1强制下线压测 4.2 发送delete&#xff08;&#xff09;请求压测 4.3 调用DiscoveryManager压测 4. 三方工具Actuator 总结 前言 上文末尾讲到了Eurek…

isis基础大全学习案例

R1配置&#xff1a; isis 1 is-level level-2 //本区域只启用level-2级别 cost-style wide //默认为narrow窄度量&#xff0c;开销只能最大63&#xff0c;并且不能打tag&#xff0c;wide宽度量的tlv和narrow不匹配&#xff0c;不能相互计算路由&#xff0c;两边都要改。 netwo…

【C++那些事儿】类与对象(3)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我之前看过一套书叫做《明朝那些事儿》&#xff0c;把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言&#xff0c;无疑是抽象且难度颇…

Redis:事务操作

目录 Redis事务定义相关命令事务的错误处事务冲突的问题Redis事务三特性 Redis事务定义 redis事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行&#xff0c;事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 redis事务…

VCenter连接主机提示:未验证主机SSL证书的真实性

问题&#xff1a;VCenter主机断开连接了&#xff0c;重新连接主机报错SSL证书问题 移除重新加入ESXI6.0节点报错常规系统错误&#xff08;如下图&#xff09; 解决方案&#xff1a;需更改一下验证方式 VCenter Serevr设置→高级设置 将项cpxd.certmgmt.mode 值 vmca 改为&…

《微信小程序从入门到精通》---笔记1

小程序&#xff0c;我又来学习啦&#xff01;请多关照~ 项目驱动 小程序开发建议使用flex布局在小程序中&#xff0c;页面渲染和业务逻辑是分开的&#xff0c;分别运行在不同的线程中。Mini Program于2017年1月7号正式上线小程序的有点&#xff1a;跨平台、开发门槛低、开发周…

VS2022的props配置

最近在点云处理项目过程中&#xff0c;使用了PCL库&#xff0c;遇到了需要在多个vs工程中导入相同库的问题。每次新建项目都要配置很多include文件路径&#xff0c;导入一堆.lib文件&#xff0c;非常头疼&#xff0c;可以通过props属性表来解决这个问题。 一、什么是props属性…

电机应用-直流有刷电机多环控制实现

目录 直流有刷电机多环控制实现 硬件设计 直流电机三环&#xff08;速度环、电流环、位置环&#xff09;串级PID控制-位置式PID 编程要点 配置ADC可读取电流值 配置基本定时器6产生定时中断读取当前电路中驱动电机的电流值并执行PID运算 配置定时器1输出PWM控制电机 配…

【Mybatis】基础增删改查

一.创建SpringBoot项目 创建新项目需要添加的依赖 当然如果是以前的项目也可以直接在pom.xml文件中添加依赖: MySQL Driver依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</…

基于vue+element-plus+echarts编写动态绘图页面

我们都知道网页的echarts可以画图&#xff0c;但是很多情况下都需要编码实现绘图逻辑&#xff0c;如果有一个前端页面可以让我输入数据然后动态生成图表的话那么该多好&#xff0c;其实这个需求不难实现&#xff0c;先看效果。 整体页面分为左右两个部分&#xff0c;其中左边的…

Node.js入门指南(二)

目录 http模块 创建http服务端 浏览器查看 HTTP 报文 获取 HTTP 请求报文 设置响应报文 网页资源的基本加载过程 静态资源服务 hello,大家好&#xff01;上一篇文章我们对Node.js进行了初步的了解&#xff0c;并介绍了Node.js的Buffer、fs模块以及path模块。这一篇文章主…

计算机毕业设计 基于SpringBoot的物业管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

2001-2022年上市公-供应链话语权测算数据(原始数据+处理代码Stata do文档+结果)

2001-2022年上市公-供应链话语权测算数据&#xff08;原始数据处理代码Stata do文档结果&#xff09; 1、时间&#xff1a;2001-2022年 2、指标&#xff1a;企业代码、股票代码、年份、股票简称、上市公司前五大供应商的采购额之和占企业当年总采购额的比例、上市公司前五大客…

C语言猜素数(ZZULIOJ1292:猜素数)

题目描述 Lx给Xp出了一道难题&#xff0c;随便在0和1000000之间抽出两个数&#xff0c;估计在这两个数之间的素数的个数&#xff0c;如果猜测的结果和正确结果一样&#xff0c;Xp就可以得到Lx的一件礼物&#xff0c;你能猜对吗&#xff1f;编程实现一下吧&#xff01; 输入&…