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

文章目录

  • 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. 奇数的表示 一. 循环…

TOGAF —体系结构治理

本章提供了架构治理的框架和指南。 3.1 引言 本部分介绍治理的性质和治理级别。 3.1.1 企业内部的治理级别 架构治理是管理企业架构和其他架构的实践和方向 并在企业范围内进行控制。 架构治理通常不是孤立地运作,而是在治理结构的层次结构中运作,其中, 特别是在大型企…

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

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

香港证监会再点名,三家“可疑虚拟资产平台交易平台”!

JPEX事件之后&#xff0c;香港证监会通过对可疑平台进行曝光&#xff0c;以提升虚拟资产交易平台牌照申请的透明性。最近&#xff0c;香港证监会于官网再点名三家“可疑虚拟资产平台交易平台”。截至目前&#xff0c;香港证监会在官网共点名9家可疑虚拟资产交易平台。 据了解&a…

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

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

一文带你深入理解MySQL的三大连接方式:左连接、右连接和内连接!

个人网站 本文首发于公众号小肖学数据分析 在MySQL中&#xff0c;常见的三种关联方式是左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;和内连接&#xff08;inner join&#xff09;。 本文我将详细介绍这三种关联方式&#xff0c;并提…

用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…

Java 8 lambda的一个编译bug

最近利用github action向Maven中央仓库发布企业微信SDK时会失败&#xff0c;从日志中发现是系统资源耗尽了&#xff0c;日志如下&#xff1a; [INFO] Changes detected - recompiling the module! :dependency [INFO] Compiling 35 source files with javac [debug target 8] …

MySQL索引 Error1071

MySQL创建索引错误 Error 1071:Specified key was too long 目录 1. 起因2. 使用环境3. 查找问题的原因4. 解决方案5. 另外的解决方案6. 前缀索引 起因 事情的起因在一次生产环境部署启动服务&#xff0c;发现启动服务时间特别长&#xff0c;超过了5分钟的时间。于是&#…

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…

MySQL- 创建可以远程访问的root账户

创建用户 默认的root用户只能当前节点localhost访问&#xff0c;是无法远程访问的&#xff0c;所以&#xff0c;我们要创建一个root账户&#xff0c;帮助用户远程访问。 create user root% IDENTIFIED WITH mysql_native_password BY 1234;这个命令是在MySQL数据库管理系统中…

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

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

为什么 MQTT 对于构建联网汽车至关重要

汽车行业正在接受构建联网汽车的想法。他们看到了利用车辆遥测数据创造新收入机会并打造更好用户体验的机会。然而&#xff0c;实施可扩展以支持数百万辆汽车的联网汽车服务可能会带来一些挑战。 对于大多数联网汽车服务&#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属性…