首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【数据结构】图综合练习--构建邻接

题目描述 已知一有向图,构建该图对应邻接。...邻接包含数组和单链表两种数据结构,其中每个数组元素也是单链表头结点,数组元素包含两个属性,属性一是顶点编号info,属性二是指针域next指向与它相连顶点信息。...第4行起输入k条弧起点和终点,连续输入k行 以此类推输入下一个图 输出 输出每个图邻接,每行输出格式:数组下标 顶点编号-连接顶点下标-......-^,数组下标从0开始。...输入样例1  1 5 7 A B C D E A B A D A E B D C B C E E D 输出样例1 0 A-1-3-4-^ 1 B-3-^ 2 C-1-4-^...有了下标之后,我们来实现插入操作,这里要注意是有顺序插入,如果头节点为空或者当前需要插入下标小于头节点下标,那么插入到头节点后面,如果不是,那么乖乖循环去找恰当位置插入。

20920

遍历(下)——邻接

概述 在我上一篇博客:图遍历(上)——邻接矩阵 中主要介绍了邻接矩阵BFS和递归DFS与非递归DFS这3种遍历算法。在这篇博客我将主要叙述邻接以上3中遍历算法。...首先来看看邻接表示方法。 邻接主要是针对稀疏图中邻接矩阵造成空间浪费而提出。下面我们来看看邻接表示。 1)无向图表示 ? 2)有向图 ?...(说明:对于BFS,DFS递归与非递归算法在这篇文章就不再重复,如有不了解请移步我上一篇博客:图遍历(上)——邻接矩阵 ) ---- 广度优先遍历(BFS) //广度优先遍历(BFS) void...return this->next; } }; class Graph{ private: vector Edgelist; //邻接...{ cout<<"请输入顶点数与边数:"<<endl; int nv,ne; cin>>nv>>ne; Graph graph(nv,ne); cout<<"邻接

89410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据结构 图邻接

    大家好,又见面了,我是你们朋友全栈君。 呃,下面该写邻接了……. 邻接出现是因为图若是稀疏图,用邻接矩阵会造成空间浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用那种。...邻接为了避免内存浪费引入了链式存储,它处理办法是: 1.用一个一维数组存储顶点,当然你也可以用单链表存储, 2.用单链表存储顶点邻接点,可以将顶点改为结构体数组,结构体中存放邻接指针,邻接点也创建一个结构体...下面是一个无向网图: 邻接中数据存储图示如下(emmm,无向图果然没有有向图好画): emmm,终于画完了,我来介绍下这个图 顶点也就是个结构体数组,是存放顶点结构,顶点中有data元素...边也是一个结构体,内有adivex元素,存放邻接下标,weight存放顶点与邻接点之间线权重,next是边结构体指针,存放该顶点下一个邻接点,next就是负责将顶点邻接点连起来。...numarc; //当前邻接边数 }GraphAdjList; //建立图邻接 void CreateAdjListGraph(GraphAdjList &G) { ArcNode

    1.1K20

    C语言实现哈希_哈希c语言代码

    常见Hash算法有:MAC,CRC,MD5/MD4,SHA等。 ---- 简单哈希实现,c语言。 哈希原理 哈希是为了根据数据部分内容(关键字),直接计算出存放完整数据内存地址。...下图是一个哈希运行时内存布局: 先说一下原理。 先是有一个bucket数组,也就是所谓桶。 哈希特点就是数据与其在位置存在相关性,也就是有关系,通过数据应该可以计算出其位置。...这个哈希是用于存储一些键值对(key -- value)关系数据,其key也就是其在索引,value是附带数据。...,因为C标准库中string.h中有一系列这样函数。...因为这个哈希中保存是键值对,所以这个方法是从哈希中查找key对应value

    4.9K20

    【线性】之顺序(C语言)

    【线性】之顺序 线性 线性(linear list)是n个具有相同特性元素有限序列 。...线性是一种在实际中广泛使用数据结构,常见线性:顺序、链表、栈、队列、字符串… 线性在逻辑上是线性结构,也就说是连续一条直线。...但是在物理结构上并不一定是连续,线性在物理上存储时,通常以数组和链式结构形式存储。 顺序 它是最简单数据结构,也是最常用数据结构——他作用就是将数据存起来。...概念:顺序是用一段物理地址连续存储单元依次存储数据元素线性结构,一般情况下采用数组存储。在数组上完成数据增删查改。 顺序一般可分为: 1.静态顺序:使用定长数据存储。...2.动态顺序:使用动态开辟数组存储。

    62410

    基于邻接AOE网实现关键路径查询

    按照图邻接”存储结构表示AOE网,实现求其关键路径算法,并验证如下图1所示AOE网关键路径。...,在它之后活动可以开始,弧表示活动,权表示活动持续时间。...AOE网可用来估算工程完成时间。由于整个工程只有一个开始点和一个完成点,故在正常情况(无环)下,网中只有一个入度为零点(源点)和一个出度为零点(汇点)。...在循环中同时遍历邻接中每一个边所存储指向节点,并且更新其ve[i].注:更新时,比较边权加上更新结点前一个结点ve与 该结点本身ve大小(全部初始化为0),取最大值。...iostream>#include #include #include #include using namespace std;/*创建图邻接

    21631

    数据结构:图存储结构之邻接

    对于图来说,邻接矩阵是不错一种图存储结构,但是我们也发现,对于边数相对顶点较少图,这种结构是存在对存储空间极大浪费。...因此我们考虑另外一种存储结构方式:邻接(Adjacency List),即数组与链表相结合存储方法。 邻接处理方法是这样。...2、图中每个顶点vi所有邻接点构成一个线性,由于邻接个数不定,所以用单链表存储,无向图称为顶点vi,有向图称为顶点vi作为弧尾出边。 例如图7-4-6就是一个无向图邻接结构。...若是有向图,邻接结构是类似的,如图7-4-7,以顶点作为弧尾来存储边容易得到每个顶点出度,而以顶点为弧头容易得到顶点入度,即逆邻接。 ?... EdgeNode/* 边结点  */ {     int adjvex;/* 邻接点域,存储该顶点对应下标 */     EdgeType weight;/* 用于存储权值,对于非网图可以不需要

    3.5K81

    存储方式之前向星与邻接

    常用邻接矩阵和邻接都挺简单,就不提了。 这个是ACM版本前向星,本质就是用数组替换了链表,效果就是更方便一些。 虽然不如十字链表删除方便,但是也能比较方便地写出边删除操作。...//其中,info保存着所有节点第一个边 //next保存着所有边信息下一个边 //to保存着边下一个节点信息。如果是带权边,可以增加一个weights数组,与to类似。...void clear(){ info.clear(); next.resize(0); to.resize(0); } }; 想了一下还是提一下邻接吧...struct Edge{ int from,to,weight; }; vector G[maxn];//可以用来模拟邻接 //使用时候给对应数组G[node]插入边即可,其实也挺方便...另外一个是刘汝佳蓝书里面的实现,应该也是邻接,只是G[maxn][edgeNum]里面放不再是直接放边对象,而是改为了边索引号n。

    38210

    C语言手撕顺序

    一、概念 顺序是用一段物理地址连续存储单元依次存储数据元素线性结构,一般情况下采用数组存储。在数组上完成数据增删查改。 顺序一般分为 1、静态顺序:使用定长数组存储元素。...2、动态顺序:使用动态开辟数组存储 我们一般使用动态顺序,因为静态顺序数组大小固定,而动态可以根据我们需求不同去在线扩容,所以接下来文章围绕如何实现动态顺序来讲解。...SLDateType x); // 顺序删除pos位置值 void SeqListErase(SeqList* ps, int pos); //修改特定位置值 void SeqListModify...(SeqList* ps, int pos,int value); 1、对顺序初始化 void SeqListInit(SeqList* ps) { ps->a = (SLDateType*)malloc...心得: 顺序开启了数据结构序章,顺序算是很简单数据结构了,从此我们需要敲一部分代码,编译一次,不能一股脑输出,结果编译发现好多个bug,需要写一部分,编译一部分,这样才更加有持续性。

    9710

    【数据结构与算法】图基本结构介绍 | 邻接邻接矩阵编码实战

    作者 :“大数据小禅” 文章简介:本篇文章对基本数据结构 图进行了一个概述,并使用领接矩阵与邻接方式来实现一个图 个人主页: 大数据小禅 图基本结构介绍 图应用 图分类 图应用...– 无权图 图表示 邻接矩阵 顶点与顶点是相连,用1来表示,不相连则用0。...adjMartix = new AdjMartix(); adjMartix.showAdj(); adjMartix.adj(3); } } 运行结果: 邻接...邻接它主要就是关心是存在边,不存在边则不管,因此的话不会有空间上浪费,邻接=数组+链表。...public class GraphXIAOCHAN { //顶点 private static int V; //边 private static int E; //邻接

    52410

    C语言——S顺序专题

    一、顺序概念及结构 线性 线性(linearlist)是n个具有相同特性数据元素有限序列。线性是⼀种在实际中⼴泛使⽤数据结构,常⻅线性:顺序、链表、栈、队列、字符串......线性在逻辑上是线性结构,也就说是连续⼀条直线。但是在物理结构上并不⼀定是连续,线性在物理上存储时,通常以数组和链式结构形式存储。...二、顺序分类 顺序和数组区别: 顺序底层结构是数组,对数组封装,实现了常⽤增删改查等接口,逻辑结构是线性,且物理结构也是线性。...1、静态顺序:使用定长数组存储元素 静态顺序缺陷:空间给少了不够⽤,给多了造成空间浪费 2、动态顺序:按需申请 3、动态顺序实现 #define INIT_CAPACITY 4 typedef...:不能执行删除; 顺序不为空:pos之后数据往前挪动一位。

    8410

    学会Cantor--C语言

    Cantor题目如下: 你是否因为读不懂Cantor而苦恼,事实上,我们只要将Cantor进行一下转化就可以十分轻松解决这道题目 仔细看图可知,奇数行分子在递减,分母在递加,而偶数行分子在递加...,分母在递减,就可以进一步得出结论:第n项中就会有n个数字,而且数字分子和分母相加就是n+1。...假设我设n为第n项,h为行数,k为列数,我将行数一次相加,如果得到行数之和大于n,就说明我找到了行数,进而可以求出列数,所以就可以得出最终结果。...如果上面的文字不好理解,我们可以将问题具体化 将设我输入n为7,使用sum来记录行数依次相加结果,直到sum>=n时,此时函数循环变量 i 为4,那么行数h也就是4,sum-1赋值给sum,sum变为...} } printf("%d/%d\n", k, h - k + 1); } return 0; } 以上就是我对于Cantor内在规律理解

    83820

    线性之顺序(C语言实现)

    线性是一种在实际中广泛使用数据结构,常见线性:顺序、链表、栈、队列、字符串等… 线性在逻辑上是线性结构,也就说是连续一条直线。...顺序一般分为;两种:1.静态顺序 2.动态顺序 静态顺序实际作用不大,本篇主要讲解动态顺序. 2.1 静态顺序简单介绍: 静态顺是指顺序容量是固定,如果看过c语言实现通讯录友友们...false; } 3.6 顺序删除操作 顺序"尾删" 顺序尾删也是很舒服....//void PrintSQL(SQL SL); void PrintSQL(SQL* SL); //顺序销毁 void DestorySQL(SQL SL); 函数实现区(SQList.c) #...SL) { assert(SL); free(SL->data); SL->data = NULL; SL->size = 0; SL->capacity = 0; } 主测试区(test.c)

    87630
    领券