数据结构——邻接表Adjacency List
邻接表 是图的一种最主要的存储结构,用来描述图上的每一个点。对图的每个顶点建立一个容器,第i个容器中的结点包含顶点Vi的的所有临界顶点。如下图所示,有向图对应的邻接表:
1.数据结构
邻接表用到两个数据结构:
(1)一个是头结点表,用一维数组存储。包括顶点和指向第一个邻接点的指针。
(2)一个是每个顶点Vi的所有邻接点构成的一个线性表,用单链表存储。无向图成为顶点Vi的边表,有向图成为顶点Vi作为尾的出表边,存储的是顶点的序号,和指向下一个边的指针。
头结点:
struct HeadNode //定义头结点 {Node *first;//指向头结点 };
首先创建邻接表表头,初始化每个结点的第一个邻接点first为NULL。
表结点:
struct Node //定义表结点 {int v; //结点编号int w;//权值Node *next; //指向下一个顶点的指针 };
2.创建邻接表
刚开始的时候把顶点表初始化,指针指向NULL。然后邻接点的表结点插入进来 ,插入到first指向的结点之前。
(1)输入第一条边的结点和权值u,v,w分别是1,3,10之后,创建第一条边。相应的表结点如图所示
(2) 输入第二条边的结点和权值u,v,w分别是1,2,12。创建一条边,对应的表结点如图所示:
3.输出邻接表
void Print(int n) //输出邻接表 {cout << "---------------------邻接表如下:----------------------" << endl;for (int i=1;i<=n;i++){Node *t=Graph[i].first;cout <<"v" << i<<": ";while(t!=NULL){cout << "["<<t->v<<" "<<t->w<<"] ";t=t->next;}cout << endl;} }
4.源代码:
#include <iostream> using namespace std; const int N=11111; struct Node //定义表结点 {int v; //结点编号int w;//权值Node *next; //指向下一个顶点的指针 };struct HeadNode //定义头结点 {Node *first;//指向头结点 };HeadNode Graph[N]; int n; //顶点数 int m;//边数 int i ; int u;//顶点1 int v;//顶点2 int w;//顶点之间的权值void InsertEdge(HeadNode &p,int x ,int y) //插入一条边 {Node *q;q=new(Node);q->v=x;q->w=y;q->next=p.first;p.first=q;//注意!此处顺序很重要,必须先链接,再断开。 }void Print(int n) //输出邻接表 {cout << "---------------------邻接表如下:----------------------" << endl;for (int i=1;i<=n;i++){Node *t=Graph[i].first;cout <<"v" << i<<": ";while(t!=NULL){cout << "["<<t->v<<" "<<t->w<<"] ";t=t->next;}cout << endl;} }int main() {cout << "请输入顶点数n和边数m"<< endl;cin >> n>> m;for (int i=1;i<=n;i++){Graph[i].first=NULL;}cout << "请输入顶点u,v和顶点之间的权值w" << endl;for (i=0;i<m;i++){cin >> u>> v>> w;InsertEdge(Graph[u],v,w);}Print(n);//输出邻接表return 0; }
5.数据测试
数据结构——邻接表Adjacency List相关推荐
- 数据结构---邻接表的BFS
数据结构-邻接表的BFS 原理:参考趣学数据结构 代码: 队列代码: #pragma once #define elemType int #define N 100 #include<stdli ...
- 数据结构---邻接表的DFS
数据结构-邻接表的DFS 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define typeNode int / ...
- 图(一)之邻接表Adjacency List
开始攻克图的算法,先从最简单的存储开始实现,本文关于邻接表的实现. 邻接表是图的存储中最简单也是最基本的存储结构,基于链表的思想实现的.在邻接表中,对于中的每个顶点建立一个单链表,第i个单链表中的节点 ...
- (数据结构)无向图的邻接多重表(Adjacency Multilist)表示
邻接多重表(Adjacency Multilist)是无向图的另一种链式存储结构 图的邻接表(Adjacency List)表示 有向图的十字链表(Orthogonal List)表示 我们在使用邻接 ...
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构|图的邻接表与深度、广度优先搜索
线性存储元素时,元素的关系也同时确定了.而非线性数据结构就不同了,需要同时考虑存储数据元素和数据元素的关系. 由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位 ...
- Java数据结构——邻接矩阵+邻接表
文章目录 一.邻接矩阵 二.邻接表 一.邻接矩阵 1. 定义 vexs[](存储顶点)和 arcs[][](存储边关系,叫邻接矩阵)集合.因此,用一个一维数组存放图中所有顶点数据: 用一个二维数组存放 ...
- MySQL—通过Adjacency List(邻接表)存储树形结构
转载自:Mysql通过Adjacency List(邻接表)存储树形结构 今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢?像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数 ...
- 有向图的邻接表表示法
图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List). 1. ...
- 有向图的邻接表描述 c++
有向图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency ...
- 【转载】邻接表表示法
图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点v i ,该方法把所有邻接于v i 的顶点v j 链成一个带头 结点的单链表,这个单链表就称为顶点v i 的邻接表(Ad ...
最新文章
- C++中的类属(泛型)机制——模板
- Cordova入门系列(三)Cordova插件调用
- Java布局怎么加图片组件_java – 将图像缩略图添加到网格中的布局...
- 多亏它,让大家做好“山竹”来袭的准备【Make It Real故事汇】
- 【纪中集训】2019.08.10【NOIP提高组】模拟 A 组TJ
- mysql存储过程的多表查询
- 有好事?卡巴斯基推出免费杀毒软件
- 使用Python解析JSON详解
- 【2019华东交通校赛:H】谁在说谎(思维)
- 在线文档转word文档
- lumaQQ.net 学习分析
- html+js实现分页功能
- POJ 3233 Matrix Power Series(java)
- java——jui的应用
- A+B的各种写法(不是couta+b;)
- 使用DistrbutedDataParallel时,nvdiai-smi显示每个进程都占用GPU:0
- 最新江西建筑八大员(材料员)模拟真题集及答案解析
- 使用信用卡 要避开这些陷阱
- css flex布局网页小游戏
- 全球及中国晶圆激光打标机行业投资竞争力及需求规模预测报告2022-2027年
热门文章
- WSNs的SMAC协议的研究
- 【C语言】把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
- nextcloud配置邮箱发送邮件
- Ubuntu下插入网线无法联网的问题
- android N 移除 webview
- python实现雪花飘落的效果_简单说 JavaScript实现雪花飘落效果
- Linux命令学习-ps命令
- 计算机专业老师教案,技能大赛-2015年全国中等职业学校计算机应用基础及计算机类专业课程“创新杯”教师信息化教学设计和说课比赛总结...
- vulcan 编程_Vulcan和AUSK之间的比较:如何充分利用Node,React和GraphQL
- python如何爬取煎蛋图片(js)