![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
链表、树、图、搜索、排序等
W24-
这个作者很懒,什么都没留下…
展开
-
散列表(hash table)详解
文章目录直接寻址表(数组)散列表散列函数冲突解决方法通过链接法解决冲突链接法的性能分析开放寻址法线性探查二次探查双重散列散列表(hash table,也叫哈希表)是能够通过给定的关键字的值直接访问到具体对应记录的一个数据结构,通常我们把这个关键字称为 keykeykey,把对应的记录称为 valuevaluevalue。在介绍散列表之前,先介绍一种直接寻址数组,然后引出散列表的概念,并给出常见的散列函数以及冲突解决方法。直接寻址表(数组)当关键字的全域 U={0,1,...,m−1}U=\{0,1,原创 2020-12-17 16:50:18 · 541 阅读 · 0 评论 -
红黑树原理及其操作详解
文章目录红黑树简介红黑树的性质红黑树的基本操作——左右旋转左旋转右旋转红黑树——插入节点情形一:插入节点 zzz 的叔节点是红色的情形二:插入节点 zzz 的叔节点是黑色的且 zzz 是一个右孩子情形三:插入节点 zzz 的叔节点是黑色的且 zzz 是一个左孩子红黑树——删除节点参考《算法导论(第三版)》13 章。参考https://www.cnblogs.com/skywang12345/p/3245399.html。红黑树(red-black tree)是许多“平衡”搜索树中的一种,可以保证在最坏原创 2020-11-25 12:38:24 · 389 阅读 · 0 评论 -
AVL 树原理及操作详解
我们已经证明了高度为 hhh 的二叉搜索树上的每个基本操作都可以在 O(h)O(h)O(h) 时间内完成,然而随着元素的插入和删除,二叉搜索树的高度是变化的。例如,如果 nnn 个关键字按照严格递增的次序被插入,则这棵树一定是高度为 nnn 的一条链,在这样的树上进行操作的时间性能是比较低的。也就是说,如果搜索树的高度较低时,这些集合操作会执行得较快;然而如果树的高度较高时,这些集合操作可能并不比在链表上执行的快。也就有了各种各样的 “平衡”搜索树。AVL 树是最早的自平衡二叉树,相比于后来出现的平衡二叉原创 2020-11-12 21:28:37 · 530 阅读 · 0 评论 -
二叉搜索树及其操作详解
参考《算法导论(第三版)》第 12 章。搜索树数据结构支持许多动态及和操作,包括 SEARCH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT 和 DELETE 等。因此,我们使用一棵搜索树既可以作为一个字典,又可以作为一个优先队列。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势,所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。二叉搜索树的定义二叉搜索树(Binar原创 2020-11-12 11:18:37 · 1775 阅读 · 0 评论 -
图的拓扑排序详解与实现——深搜(递归、非递归)、广搜
文章目录基本概念有向无环图(DAG)拓扑排序AOV 网DAG 拓扑排序算法广搜优先搜索实现拓扑排序深度优先搜索非递归实现拓扑排序深度优先搜索递归实现拓扑排序基本概念有向无环图(DAG)如何用有向无环图(DAG,Directed Acyclic Graph) 来表示偏序关系?设 RRR 是有穷集合 XXX 上的偏序关系,对 XXX 中每个 vvv,用一个以 vvv 为标号的顶点表示,由此构成顶点集 VVV;对任意 (u,v)∈R,(u≠v)( u , v )∈R,( u ≠ v )(u,v)∈R,(原创 2020-11-08 21:54:10 · 2957 阅读 · 1 评论 -
有向图的强连通性 & Kosaraju算法(求有向图的强连通分量)
浅谈无向图的连通性连通图是无向图的一个概念:在无向图中,若从顶点 v1v_1v1 到顶点 v2v_2v2 有路径,则称顶点 v1v_1v1 与 v2v_2v2 是连通的;如果图中任意一对顶点都是连通的,则称此无向图是连通图。对于一个非连通图,可以通过深度优先搜索或广度优先搜索来获取它的连通分量:从一个未访问过的节点开始进行深度优先或者广度优先搜索,其能到达的所有顶点及其相关的边构成的子图就是一个连通分量;直到访问完全部的节点,便可以获取该图的所有连通分量。有向图强连通性的概念在有向图原创 2020-11-08 10:34:06 · 3697 阅读 · 0 评论 -
无向图的最小生成树——Prim、Kruskal算法
最小生成树定义设 G=(V,E)G = (V, E)G=(V,E) 是一个无向连通网,如果连通图的一个子图是一棵包含所有顶点的树(顶点数 = 边数 + 1),则该子图称为 GGG 的生成树(Spanning Tree)。连接图中所有的 nnn 个点,并且只有 n−1n-1n−1 条边的子图就是它的生成树;生成树是连通图的包含图中的所有顶点的极小连通子图;图的生成树不惟一。从不同的顶点出发进行遍历,可以得到不同的生成树;只要能连通所有顶点而又不产生回路的任何子图都是它的生成树。EEE 中每一条原创 2020-11-07 19:10:38 · 5428 阅读 · 0 评论 -
图连通性概念总结
文章目录无向图的连通性有向图的连通性包括无向图的连通性和有向图的连通性:无向图的连通性指的是一个无向图是否为连通图;有向图的连通性指的是一个有向图是否为强连通图、单项连通图、弱连通图;强连通图、连通图、单向连通图三者之间的关系是,强连通图必然是单向连通的,单向连通图必然是弱连通图。无向图的连通性连通图是无向图的一个概念:在无向图中,若从顶点 v1v_1v1 到顶点 v2v_2v2 有路径,则称顶点 v1v_1v1 与 v2v_2v2 是连通的;如果图中任意一对顶点都是连通的,则原创 2020-11-07 14:55:12 · 4736 阅读 · 0 评论 -
图的遍历算法——DFS、BFS原理及实现
文章目录图的遍历定义如何判别某些顶点被访问过深度优先搜索( Depth-First-Search)深度优先搜索的递归实现广度优先搜索(Breadth-First-Search)广度优先搜索实现广度优先搜索实现图的遍历定义图的遍历(搜索):从图的某一顶点出发,对图中所有顶点访问一次且仅访问一次。访问:抽象操作,可以是对节点进行的各种处理。连通图与非连通图都可以。但是图结构具有复杂性,不像线性表和树结构的顶点是有先后次序的,在图结构中任何两个顶点之间都可能存在边,顶点是没有先后次序的,所以顶点编号原创 2020-11-07 11:08:10 · 2857 阅读 · 0 评论 -
前(后)序+中序遍历序列构建二叉树——递归方法分析及实现
问题来源https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/。从前序和中序遍历序列构建二叉树(递归解法)假定树中没有重复元素。对于任意一颗树而言,前序遍历的形式总是[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]原创 2020-11-01 10:27:56 · 1124 阅读 · 0 评论 -
二叉树最大(最小)深度——递归、深搜、广搜方法总结
文章目录二叉树的最大高度递归深搜广搜二叉树的最小深度递归深搜广搜二叉树的最大高度二叉树的高度有两种定义:从根节点到最深节点的最长路径的节点数。从根到最深节点的最长路径的边数。我们这里采用第一种定义。递归class Solution {public: int maxDepth(TreeNode* root) { if(root == NULL) return 0; int m = maxDepth(root->left); i原创 2020-10-28 15:54:45 · 543 阅读 · 0 评论 -
二叉树遍历——深度优先(前中后序)+广度优先(层序遍历)
二叉树的遍历二叉树的遍历分为两类,一类是深度优先遍历,一类是广度优先遍历。左孩子结点一定要在右孩子结点之前访问。深度优先遍历二叉树的深度优先遍历方式有三种,先根(序)遍历、中根(序)遍历、后根(序)遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。下面一一讲解具体的递归和非递归实现。1、先根遍历原创 2020-10-25 19:10:14 · 2320 阅读 · 0 评论