![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
牛神自
好好学习,天天向上...
展开
-
数据结构---图---总结---8
图的存储结构学习了书中(大话数据结构)的五种:其中比较重要的是邻接矩阵和邻接表,他们分别代表边集是用数组还是链表的方式存储。十字链表是邻接矩阵的升级,而邻接多重表是邻接表的升级。边集数组更多考虑的是对边的关注。用什么存储结构需要具体问题具体分析,通常稠密图,或读存数据较多,结构修改较少的图,用邻接矩阵要更合适,反之则应该考虑邻接表。图的遍历分为深度和广度两种,各有优缺点。图的应用:学习了三种:最小生成树、最短路径、有向无环图。最小生成树:学习了两种算法:普里姆(Prim)算法和克鲁斯卡尔(Kr原创 2021-12-07 10:26:45 · 561 阅读 · 0 评论 -
数据结构---图---关键路径---7
拓扑排序主要是为解决一个工程能否顺序进行的问题,但有时我们还需要解决工程完成需要的最短时间问题。如果要对一个流程图获得最短时间,就必须要分析它们的拓扑关系,并且找到当中最关键的流程,这个流程的时间就是最短时间。在前面讲了AOV网的基础上,我们来介绍一个新的概念。在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,我们称之为AOE网(Activity On Edge Network)。把AOE网中没有入边的顶点称为始点或源点,没有原创 2021-12-02 12:01:05 · 1861 阅读 · 0 评论 -
数据结构---图---拓扑排序---6
无环图:图中没有回路在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为AOV网(Activity On Vertex Network)。AOV网中的弧表示活动之间存在的某种制约关系(也可以理解活动要分先后顺序),AOV网中不能有回路。设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1,v2,…vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在顶点vj之前。则我们称这样的顶点序列为一个拓扑序列。拓扑排序:就是对原创 2021-12-02 10:23:27 · 745 阅读 · 0 评论 -
数据结构---图---最短路径---5
对于非网图,它没有边上的权值,最短路径就是指两顶点之间经过的边数最少的路径。对于网图,最短路径指两顶点之间经过的边上权值之和最少的路径,称路径上第一个顶点是源点,最后一个顶点是终点。两种求最短路径的算法:1.迪杰斯特拉(Dijkstra)算法2.弗洛伊德(Floyd)算法迪杰斯特拉(Dijkstra)算法:(未测试) private const int MAXVEX = 9; public int[] pathMatirx = new int[MAXVEX]; //用于存储最原创 2021-11-25 15:14:46 · 398 阅读 · 0 评论 -
数据结构---图---最小生成树---4
我们把构造连通网的最小代价生成树称为最小生成树(MinimumCostSpanningTree)找连通网的最小生成树,经典的算法有两种:普里姆算法和克鲁斯卡尔算法。1.普里姆(Prim)算法:以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树 /// <summary> /// 普里姆算法:最小生成树:具体讲解步骤看书 /// </summary> /// <param name="graph"></param>原创 2021-11-23 10:36:39 · 970 阅读 · 0 评论 -
数据结构---图---遍历---3
图的遍历和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历。由于图比较复杂,我们在遍历的过程中把访问过的顶点打上标记,以避免访问多次而不自知。具体办法是设置一个访问数组visited[n],n是图中顶点的个数,初始值为0,访问过后设置为1。遍历方案:1.深度优先遍历(DepthFirstSearch),也称深度优先搜索,简称DFS2.广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS1.深度优先遍历深度原创 2021-11-22 18:00:19 · 403 阅读 · 0 评论 -
数据结构---图---存储结构---2
不清楚的看大话数据结构这本书。图结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。多重链表虽能实现,也有相应的问题,具体看书。存储结构有五种邻接矩阵:边数少会浪费空间(一维数组+二维数组(交错数组))邻接表:适合关注的重点是顶点的无向图(一维数组+一个链表))十字链表:适合有向图(一维数组+两个链表))邻接多重表:适合关注的重点是边的无向图(一维数组+一个链表))边集数组:适合对边依次进行处理原创 2021-11-22 16:52:41 · 381 阅读 · 0 评论 -
数据结构---图---精简知识点---1
学习大话数据结构,具体细节看书。图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分。图按照边或弧的多少分稀疏图和稠密图。如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图。图中顶点之间有邻接点、依附的概念。无向图顶点的遍数叫做度,有向图顶点分为入度和出度。图上的边或弧上带权则称为网。图中顶点间存在路径,两顶点存在路径则说明是连通的,如果路径最终回到起始点则称为环,当中不重复叫简单路径。若任意两顶点都是连通原创 2021-11-22 11:51:36 · 489 阅读 · 0 评论 -
C# 二叉树之赫夫曼树和赫夫曼编码
参考链接:链接原创 2021-08-31 18:18:43 · 86 阅读 · 0 评论 -
C# 树之二叉树-1-精简理论
树型结构比线性表复杂一些,线性表可以说是树型结构的特例。理论知识自己看书,本文参考大话数据结构。书中原话:存储结构的设计是一个非常灵活的过程,一个存储结构设计的是否合理,取决于基于该存储结构的运算是否适合,是否方便,时间复杂度好不好等。树型结构一样可以用顺序存储和链式存储,具体有几种表示方法:1.双亲表示法:顺序存储展示,每个节点保存一个父节点的索引,想要访问子节点,可以添加子节点索引。2.孩子表示法:2.1.多重链表:链式存储2.1.1.每节点指针域的个数为树的度,固定长度,会造成空原创 2021-08-28 13:48:46 · 775 阅读 · 0 评论 -
C# 队列实现
队列实现比栈复杂一点,同样也是特殊的线性表,有顺序存储和链式存储。参考大话数据结构两种方式在时间上都是O(1),循环队列开辟了空间暂时不释放,链队列在申请和释放有一定的时间开销,入队出队频繁,会有细微差异。空间上,循环队列可能会造成空间浪费,链队列虽然有指针节点的开销,可以接受,更灵活。总结:在去订最大长度的情况下,简易循环队列(也要视情况定),不确定则采用链队列。节点类:和栈的节点类一样public class QueueNode<T> { private T data原创 2021-08-26 18:39:09 · 1109 阅读 · 0 评论 -
C# 栈的实现
栈是特殊的线性表,所以线性表的大部分性质它都有。所以也有顺序存储的栈(顺序栈)和链式存储的栈(链栈)只实现最常用的几个操作,其他自己实现即可,可对比C#自带的Stack。节点类:都一样public class StackNode<T>{ private T data; private StackNode<T> next; public T Data { get { return原创 2021-08-26 13:28:05 · 806 阅读 · 0 评论 -
C#双向循环链表
双向循环链表跟单向循环链表差不多,多了一个指针。部分代码可以优化:插入、删除、获取元素时可以根据count判断一下是前半部分还是后半部分,来决定是走Next还是Last。节点类:/// <summary>/// 节点/// </summary>public class Node<T>{ private T data; private Node<T> last; private Node<T> next;原创 2021-08-26 11:39:41 · 461 阅读 · 0 评论 -
C# 循环单链表
和单链表差不多,只不过添加一个尾指针,指向最后一个元素,头节点就不用公开了,默认一个私有字段即可,可以快速获取最后一个元素和第一个元素,时间复杂度为O(1)。节点类/// <summary>/// 节点/// </summary>public class Node<T>{ private T data; private Node<T> next; public T Data { get原创 2021-08-25 18:28:56 · 357 阅读 · 2 评论 -
C# 单链表
抛异常的地方修改为打印信息并返回即可,可以根据自己需求更改,比如C#内置的链表有Count这个属性可以自己添加,而不用GetLength()每次都要遍历一遍。Node/// <summary>/// 节点/// </summary>public class Node<T>{ private T data; private Node<T> next; public T Data { get原创 2021-08-25 16:41:52 · 189 阅读 · 0 评论