【邻接表特点,邻接表的代码实现】

文章目录

    • 邻接表特点
    • 邻接矩阵和邻接表表示法的关系

邻接表(Adjacency List) 是图的一种链式存储结构。

#include<iostream>
using namespace std;#define MVNum 100	//最大顶点数
#define OtherInfo int //权值
#define VerTexType int//顶点的指针域
#define Status inttypedef struct ArcNode {	//边结点int adjvex;//该边指向的顶点的位置struct ArcNode* nextarc;//指向下一条边的指针OtherInfo info;//和边相关的信息,如权值等
}ArcNode;typedef struct VNode {//顶点信息VerTexType data;ArcNode* firstarc;//指向第一条依附于该顶点的边的指针
}VNode,AdjList[MVNum];//邻接表typedef struct
{AdjList vertices;//图的边结点组成的数组int vexnum, arcnum;//图的边结点的所有顶点数和边数
}ALGraph;int LocateVex(ALGraph G, VerTexType v);//创建无向图
Status CreateALGraph(ALGraph& G) {ArcNode* p1,*p2;int i,j;cout<<"请输入邻接表的顶点数和边的数目: " << endl;cin >> G.vexnum >> G.arcnum;cout << "请输入邻接表的顶点:" << endl;for (i = 0; i < G.vexnum; i++) {cin >> G.vertices[i].data;G.vertices[i].firstarc = NULL;//初始化邻接点}for (i = 0; i < G.arcnum; i++) {VerTexType v1, v2;cin >> v1>> v2;i = LocateVex(G, v1);j = LocateVex(G, v2);//确定v1,v2在G中的位置,即顶点在G.vertices中的序号p1 = new ArcNode;//生成一个新的边结点*p1p1->adjvex = j;//邻接点序号jp1->nextarc = G.vertices[i].firstarc;G.vertices[i].firstarc = p1;//将新结点*p1插入顶点vi的表边结点p2 = new ArcNode;//生成另一个对称的新的边结点*p2p2->adjvex = i;//邻接结点序号ip2->nextarc = G.vertices[j].firstarc;G.vertices[j].firstarc = p2;//将新结点插入顶点vj的边表头部}return 1;
}int LocateVex(ALGraph G, VerTexType v) {//返回顶点u在图中的位置int i;for (i = 0; i < G.vexnum && G.vertices[i].data != v; i++) {if (i == G.vexnum) {return -1;}else {return i;}}
}void showAdj(ALGraph G) {int i;cout << "头结点	邻接点" << endl;for (i = 0; i < G.vexnum; i++) {cout << G.vertices[i].data << " ";ArcNode* ptr = G.vertices[i].firstarc;while (ptr != NULL) {cout << "-->" << G.vertices[ptr->adjvex].data << " ";ptr = ptr->nextarc;}cout << endl;}
}int main() {ALGraph G;CreateALGraph(G);showAdj(G);return 0;
}

邻接表特点

  • 方便找任一顶点的所有“邻接点”。
  • 节约稀疏图的空间
    • 需要N个头指针+2E个结点(每个结点2个域)。
  • 方便计算任一顶点的“度”?
    • 对无向图:是的
    • 对有向图:只能计算“出度”;需要构造“逆邻接表”(存指向自己的边)来方便计算“入度”
  • 不方便检查任意一对顶点间是否存在边。

邻接矩阵和邻接表表示法的关系

区别:
1.对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。
2.邻接矩阵的空间复杂度为O(n平方),而邻接表的空间复杂度为O(n+e)。
用途:
邻接矩阵多用于稠密图;而邻接表多用于稀疏图。

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

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

相关文章

一道好题——分治

一道好题应该有一个简洁的题面。 有一个长度为 n&#xff0c;初始全为 0 的序列 a&#xff0c;另有一个长度为 n 的序列 b&#xff0c;你希望将 a 变成 b&#xff0c;你可以执行如下两种操作&#xff1a; 1 x&#xff1a;将 a 中所有值为 x 的数 11。 2 x&#xff1a;将 a 中下…

Android开发APP显示头部Bar

Android开发显示头部Bar 需求&#xff1a; 显示如下图&#xff1a; 显示头部Bar&#xff0c;颜色也能自定义。 解决方案 这个修改是在如下三个文件里进行修改&#xff1a; 按顺序修改&#xff1a; themes.xml(night): <resources xmlns:tools"http://schemas.andr…

持续集成交付CICD:Jenkins Sharedlibrary 共享库

目录 一、理论 1.共享库 2.共享库配置 3.使用共享库 4.共享库扩展 二、实验 1.连接共享库 2.使用共享库 三、问题 1.路径报错 2.readJSON 报错 一、理论 1.共享库 &#xff08;1&#xff09;概念 1&#xff09;共享库这并不是一个全新的概念&#xff0c;其实在编…

央国企数字化转型难在哪?为什么要数字化转型?

科技在发展&#xff0c;技术在升级&#xff0c;全球信息化、数字化的步伐在加快&#xff0c;企业想要在未来的发展中抓住机会&#xff0c;更好地发展壮大&#xff0c;就需要加快企业数字化转型的速度&#xff0c;才能立足于信息化、数字化时代&#xff0c;央国企作为企业中的一…

Vue3 项目修改index.html的 title

实现思路 通过插件 vite-plugins-html 进行参数配置&#xff0c;html 中使用参数&#xff0c;实现配置安装插件 $ npm install vite-plugins-html --save-devvite.config.js 中的配置 // 可以动态处理html文件内容的 import { createHtmlPlugin } from vite-plugin-htmlexpo…

Echarts 实现两两柱图重叠(背景和实际值柱图)

Echarts实现两两重叠柱状图_echarts 重叠柱状图_Web_阿凯的博客-CSDN博客 引用启发的博客 先来效果&#xff1a; option {backgroundColor: #03213D,animation: true, // 控制动画是否开启animationDuration: 1000, // 动画的时长, 它是以毫秒为单位animationDuration: func…

KaiwuDB 监控组件及辅助 SQL 调优介绍

一、介绍 KaiwuDB 具备完善的行为数据采集功能&#xff0c;此功能要求 KaiwuDB 数据库系统 C/E/T 端不同进程的不同维度的指标采集功能十分完善&#xff1b;在不同进程完成指标采集后&#xff0c;会通过 Opentelemetry 和 Collector 将指标存入 Prometheus&#xff0c;以便查找…

KiCad源代码研究:KiCad是如何渲染和绘图的。

common.json文件中appearance.show_scrollbars common.json对应于代码的common_settings 1.EDA_DRAW_PANEL_GAL类 EDA_DRAW_PANEL_GAL类中定义了绘图的基本要素&#xff1a; /// Interface for drawing objects on a 2D-surfaceKIGFX::GAL* m_gal;/// Stores v…

主播三维能力总览

主播需要的三维能力包括话术能力、成交能力和表现力 主播的话术能力 主播在直播过程中运用语言和表达方式的能力。好的话术能力可以帮助主播吸引观众、增加互动、提高直播效果等。 1.了解观众需求:在直播前&#xff0c;主播应该了解观众的需求和兴趣&#xff0c;以便在直播过…

小程序商城免费搭建之java商城 电子商务Spring Cloud+Spring Boot+二次开发+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

Scala--- Actor通信模型

一、概念理解 1、Java中的并发编程 Java中的并发编程是基于共享数据和加锁的一种机制&#xff0c;即会有一个共享的数据&#xff0c;然后有若干个线程去访问这个共享的数据(主要是对这个共享的数据进行修改)&#xff0c;同时Java利用加锁的机制(即synchronized)来确保同一时间…

98.qt qml-使用曲线图综合示例、支持多种鼠标交互、支持百万数据显示(已适配黑白风格)

在上章我们只是简单实现了曲线图和折线图的显示: 79.qt qml-如何在QML中使用QCustomPlot之曲线/折线示例(已适配黑白风格)_qml 折线图_诺谦的博客-CSDN博客 所以本章实现综合示例、并添加多种功能如下所示: 详细显示:鼠标任意移动显示具体值内容鼠标右击: 弹出菜单栏,支持…

记一次解决Pyqt6/Pyside6添加QTreeView或QTreeWidget导致窗口卡死(未响应)的新路历程,打死我都想不到是这个原因

文章目录 💢 问题 💢🏡 环境 🏡📄 代码💯 解决方案 💯⚓️ 相关链接 ⚓️💢 问题 💢 我在窗口中添加了一个 QTreeWidget控件 ,但是程序在运行期间,只要鼠标进入到 QTreeWidget控件 内进行操作,时间超过几秒中就会出现窗口 未响应卡死的 状态 🏡 环境 �…

智慧校园烟火识别及预警解决方案,保障校园消防安全

一、方案背景 校园消防安全一直以来是社会各界备受关注的问题。为了保障师生的人身安全和财产安全&#xff0c;越来越多的学校开始引入AI智能检测技术&#xff0c;通过运用AI智能烟火检测技术&#xff0c;对学校的周界、教室、走廊、公共区域、教学楼、食堂等场所进行安全监测…

世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915

产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达 12W&#xff0c;最大电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其中一路灯…

【c#】使用Prometheus监控Windows系统

Prometheus 监控Windows机器 1&#xff0e;Prometheus 简单介绍 Prometheus 是一个开源的系统监控和报警工具包,最初建立在 SoundCloud 之上。自 2012 年成立以来,许多公司和组织都采用了 Prometheus,它拥有非常活跃的开发者和用户社区。现在是一个独立的开源项目,独立于任何…

Leetcode 153. 寻找旋转排序数组中的最小值

class Solution {//因为最小值和最大值总是相邻的&#xff08;除了初始状态&#xff09;//1.用二分查找&#xff0c;如果右侧是有序则最小值在左侧//2.如果右侧无序则最小值在右侧//如果mid正好是最小值&#xff0c;那么右侧自然是有序的&#xff0c;//为了将mid加入到搜索的一…

你想对构造函数说些什么?

回顾知识 在学习类的默认成员函数之前&#xff0c;先带大家复习一下什么是类&#xff0c;类是在C中引进的新的类型&#xff0c;是一种自定义类型&#xff0c;实际上跟C语言中的结构体类似&#xff0c;但是是对结构体的升级&#xff0c;可以在类里面添加函数&#xff0c;也有对应…

借駐conda安裝evo

代碼如下&#xff1a; conda create -n evo python3.8 conda activate evo pip install evo --upgrade --no-binary evo 然後耐心等待一下&#xff0c;即可順利安裝。前提是電腦里有conda&#xff01;