
数据结构
文章平均质量分 91
数据结构是一门特别重要的学科,只有深入学习数据结构的知识,我们才能在代码能力这方面有质的提升。
羊羊羊三斤
21届在校大学生,专业是计算机科学与技术。
展开
-
图的最短路径
概念从在带权有向图G中的某一顶点出发, 找出一条通往另一顶点的最短路径, 最短也就是沿路径各边的权值总和达到最小.分类给定一个带权图G的每条边(vi,vj)上的权值都是非负实数. 另外, 给定V中的一个顶点s充当源点.基本思想: 按路径长度递增的次序来产生最短路径算法.把V分成两组:dist[] : 记录从源点s到其它顶点当前的最短路径长度. 初始时源点s对应的元素为0, 其它为无穷大.pPath[] : pPath[i]表示从源点到顶点i之间的最短路径的前驱顶点的下标. 初始时全为-1, 在算法结束时,原创 2023-01-21 22:48:43 · 3118 阅读 · 25 评论 -
图的关键路径(AOE网络)
在AOE网中, 有些活动是可以并行进行的. 从源点到汇点的有向路径可能有多条, 并且这些路径长度可能不同. 完成不同路径上的活动所需的时间虽然不同, 但是只有所有路径上的活动都已经完成, 整个工程才能算结束. 因此, 从源点到汇点的所有路径中, 具有最大路径长度的路径称为关键路径, 而把关键路径上的活动称为关键活动.AOE网和AOV网都是有向无环图, 不同之处在于它们的边和顶点所代表的含义不同, AOE网中的边有权值, 而AOV网中的边无权值, 仅代表顶点之间的前后优先关系.这两条最长路径即为关键路径.原创 2023-01-18 21:56:06 · 5212 阅读 · 11 评论 -
图的拓扑排序(AOV网络)
图的每条边弧处理一次图的每个顶点访问一次采用邻接表表示时, 时间复杂度为O(n+e).采用邻接矩阵表示时, 时间复杂度O(n2).空间复杂度都为O(n).原创 2023-01-15 21:11:26 · 2644 阅读 · 6 评论 -
图的最小生成树
在无向图中, 一条边会在邻接矩阵中存储两次, 对于(u,v)这条边, (u,v)与(v,u)这两条意义相同的边都会存储到邻接矩阵中, 所以我们该如何将这两条边中的一条压入堆中呢?在无向图中, 一条边会在邻接表中存储两次, 对于(u,v)这条边, (u,v)与(v,u)这两条意义相同的边都会存储到邻接表中, 所以我们该如何将这两条边中的一条压入堆中呢?我们可以发现如果图中有较小相等的权值边, 最小生成树可能不唯一, 但是最小生成树上的权值之和是相等的. 上面两种方案的权值之和都是50, 但因为(v。原创 2023-01-12 21:18:48 · 4314 阅读 · 16 评论 -
图的生成树与生成森林
对于有向图来说, 若从某一顶点到图中的每个顶点都有路径, 则能够访问到图中的所有顶点, 否则不能访问到所有顶点. 因此判断有向图的强连通性, 需要依次从所有顶点出发遍历, 只有从所有顶点出发遍历到其它所有顶点, 该有向图才具有强连通性, 如果从某一个顶点出发遍历, 不能连续遍历到其它顶点, 则该有向图不具有强连通性.若无向图G是非连通图, 从图中某一顶点出发遍历图, 不能访问到该图的所有顶点, 需要依次对图中的每一个连通分量进行深度优先遍历或者广度优先遍历, 即需要从多个顶点出发进行DFS或者BFS.原创 2023-01-06 21:16:30 · 3151 阅读 · 35 评论 -
图的遍历(深度DFS与广度BFS)
*设图G有n个顶点, e条边, 在广度优先遍历算法中, 每一个顶点都会进一次队列且只进一次, 同时每次要遍历每个顶点对应的链表中所有边表顶点一次, 因此若采用邻接表作为存储结构, 广度优先遍历的时间为O(n+e).若采用邻接矩阵作为存储结构, 则时间为O(n。无向图G, 从顶点A出发, 一种可能的深度优先遍历: A,B,E,G,D,F,C. 另一种可能的深度优先遍历: A,C,F,G,E,B,D. 所以当存储结构和遍历算法不确定时, 其遍历结果可能不唯一.), 而空间复杂度均为O(n). **原创 2023-01-03 18:39:19 · 1300 阅读 · 30 评论 -
图的概念及存储结构
若图中顶点对是有序的, 即边是有方向的,边集E(G)为有向边的集合, 则图G称为有向图. 一般将边称为弧(arc), 以有序对表示一条从顶点u出发到达顶点v的弧, 其中: u称为弧尾或者起点, v称为弧头或者终点. 在有向图中, 和是不一样的.若图中顶点对是无序的, 即边是无方向的, 边集E(G)为无向边的集合, 则图G称为无向图. 以无序对(u,v)表示u和v之间存在一条无向边. 在无向边中边是对称的, (u,v)和(v,u)表示同一条边.原创 2022-12-31 18:34:41 · 912 阅读 · 7 评论 -
数据结构-归并排序与基数排序
归并的含义是将两个或者两个以上已经有序的子序列合并成一个新的有序的序列。归并排序的基本思想是分治法,也就是先让子序列有序,再将子序列合并成有序的序列,类似二叉树的后序遍历。假设待排序的元素有n个,可以将这n个元素视为n个长度为一的子序列,然后两两归并,得到n/2个有序子序列。之后继续两两归并直到合并成长度为n的有序序列为止;上述这种两两归并的方法叫做二路归并排序。...原创 2022-08-25 21:04:05 · 1186 阅读 · 14 评论 -
数据结构-快速排序
快速排序的基本思想是分治法,在待排序元素中任取一个元素作为基准,通过一定的操作使得一边的元素都小于该基准值,而另一边的元素都大于该基准值。通过这一趟排序划分被选为基准值的元素放在了最终正确的位置。然后对该基准值的左右两边元素分别递归地重复上述过程,直到左右两边的区间只有一个元素或者区间不存在,也就是待排序的所有元素都放在了其最终位置上。原创 2022-08-24 18:12:57 · 2681 阅读 · 13 评论 -
数据结构-红黑树
红黑树也是一种二叉排序树,在红黑树中每个结点存储着对应的颜色(红色或者黑色),由于AVL树的高度平衡是因为非常频繁地调用旋转来保存自身平衡的,代价较大。所以在AVL树的基础上进一步放宽条件,引入红黑树,即红黑树的最长路径不会比最短路径长两倍。......原创 2022-08-18 12:05:53 · 1220 阅读 · 8 评论 -
数据结构-AVL树(平衡二叉树)
规定在插入和删除二叉搜索树的结点时,要保证任意结点的左右子树高度差的绝对值不超过1,我们将这样特殊的二叉搜索树称为AVL树(平衡二叉树)。每一个结点中有记录其左右子树高度差的平衡因子,也即平衡因子的值只可能是-1,0,1。(1如果某结点的左子树高度比右子树高度高一则平衡因子为-1,如果某结点的左子树高度比右子树高度低一则平衡因子为1,如果某结点的左子树高度与右子树高度一样则平衡因子为0)。............原创 2022-08-11 23:08:30 · 1146 阅读 · 1 评论 -
数据结构-二叉搜索树
二叉搜索树也称二叉排序树或者二叉查找树,它是在普通二叉树上加入一些特性所形成的:1,若左子树非空,则左子树上所有结点的值均小于根结点的值。2,若右子树非空,则右子树上所有结点的值均大于根结点的值。3,其左右子树也分别是一棵二叉搜索树。......原创 2022-08-07 16:01:18 · 1839 阅读 · 4 评论 -
数据结构-链式二叉树
对于那些非完全二叉树,由于顺序存储结构的空间利用率低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每一个结点。在链式二叉树中,结点结构通常包括数据域和若干个指针域。......原创 2022-08-02 12:04:38 · 2702 阅读 · 2 评论 -
数据结构-堆(完全二叉树)
堆是一种数据结构,它与操作系统的虚拟进程地址空间中的堆是两回事。堆的逻辑结构是一颗特殊的完全二叉树,它要求双亲结点中的数据要大于或者小于其左右孩子结点中的数据;而堆的物理结构是由动态数组来实现的。 堆可以分为大根堆与小根堆。设数组a存储着堆中的数据,大根堆就是双亲结点的数据大于其左右孩子结点的数据(a i >= a 2*i + 1 && a i >= a 2*i + 2);小根堆就是双亲结点的数据小于其左右孩子结点的数据(a i ...原创 2022-07-27 12:48:12 · 1687 阅读 · 8 评论 -
数据结构-队列(链队列与循环队列)
队列也是一种特殊的线性表,其操作受到限制。只允许在队列的一端进行插入数据操作,而在队列的另一端进行删除数据操作。在队列中,进行插入数据操作的一端叫做队尾,其操作叫做入队列或者进队列;而进行删除数据操作的一端叫做队头或者队首,其操作叫做出队列或者离队列。如上图所示,n1,n2,n3,n4,n5依次从队尾入队,队头元素是n1,队尾元素是n5;而出队只能从另一端队头出,次序依次为n1,n2,n3,n4,n5。......原创 2022-07-24 22:43:30 · 2062 阅读 · 10 评论 -
数据结构-栈
栈是一种特殊的线性表,其只允许在固定一端进行插入和删除操作。允许进行数据插入和删除的一端叫做栈顶,而不允许数据插入和删除的那一端叫做栈底。如上图所示,n1为栈底元素,n5为栈顶元素。由于栈只能在栈顶进行插入删除操作,所以压栈的次序依次为n1,n2,n3,n4,n5;而出栈的次序为n5,n4,n3,n2,n1;由此可见,栈的特性可以概括为后进先出(LastInFirstOut,LIFO)。.........原创 2022-07-20 23:57:34 · 930 阅读 · 5 评论 -
数据结构-带头双向循环链表
链表的种类非常丰富,有带头结点的或不带头结点的,有单向的或双向的,有循环的或非循环的,这样组合起来有2*2*2=8种链表结构。头结点与头指针的概念:不管带不带头结点,头指针都始终指向链表的第一个结点,而头结点是带头链表中第一个结点,该结点通常不存储数据。 引入头结点可以带来两个优点:1.由于第一个数据结点的位置被存储在头结点的指针域中,因此在链表的第一个位置上的操作和在链表其他位置上的操作一致,无须进行特殊处理。2.无论链表是否为空,其头指针都指向头结点,因此空表与非空表的处理也得到统一。........原创 2022-07-18 00:19:54 · 1589 阅读 · 10 评论 -
数据结构-单链表
链表能按需申请释放空间,插入和删除操作不需要移动元素,只需要修改结点里指针变量的指向就可以,但也会失去顺序表可随机读写的优点。原创 2022-07-08 12:47:09 · 447 阅读 · 1 评论 -
数据结构-动态顺序表
对于动态顺序表,在动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间占满,就将原有的存储空间扩充或者另外开辟一块更大的存储空间,用以替换原来的存储空间,从而达到扩充存储数组空间的目的,而不需要为线性表一次性地划分所有空间。......原创 2022-07-06 11:43:40 · 1001 阅读 · 4 评论 -
数据结构-静态顺序表
顺序表又分为静态顺序表和动态顺序表。对于静态顺序表,在静态分配时,由于数组的大小和空间事先已经固定好了,一旦空间占满,再加入新的数据就会产生溢出,进而导致程序崩溃。原创 2022-07-04 21:04:00 · 1363 阅读 · 0 评论