数据结构
文章平均质量分 72
MeridaH
这个作者很懒,什么都没留下…
展开
-
数据结构与算法
HashTableHash表实现(拉链和分散地址)Hash策略常见的有哪些?STL中hash_map扩容发生什么?(1) 创建一个新桶,该桶是原来桶两倍大最接近的质数(判断n是不是质数的方法:用n除2到sqrt(n)sqrt(n)范围内的数) ;(2) 将原来桶里的数通过指针的转换,插入到新桶中(注意STL这里做的很精细,没有直接将数据从旧桶遍历拷贝数据插入到新桶,而是通过指针转换)(3) 通过swap函数将新桶和旧桶交换,销毁新桶。常见的散列函数(哈希函数)有:取模,将关键...原创 2021-03-05 05:44:57 · 169 阅读 · 1 评论 -
快速排序详解
理解原理快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。这种思路就叫做分治法。每次把数列分成两部分,究竟有什么好处呢?假如给定8个元素的数列,一般情况下冒泡排序需要比较8轮,每轮把一个元素移动到数列一端,时间复杂度是O(n^2)。而快速排序的流程是什么样子呢?如图所示,在分治法的思想下,原数列在每一轮被拆分成两部分,每一部分在下一轮又分别被拆分成两部分,直到不可再分为止。这样一共需要多少轮呢转载 2021-03-05 05:27:38 · 558 阅读 · 1 评论 -
AVL树理解
平衡二叉树平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡因子通过“平衡因子”来判断一颗二叉树是否符合高度平衡。对于AVL树的每一个结点,平衡因子是它的左子树高度和右子树高度的差值。只有当二叉树所有结点的平衡因子都是-1, 0, 1这三个值的时候,这颗二叉树才是一颗合格的AVL树。...转载 2021-03-05 03:40:49 · 304 阅读 · 1 评论 -
红黑树的原理和实现
二叉树的缺陷,退化成链表的时候,几乎成为线性,不平衡,从而诞生了红黑树红黑树满足二叉树的基本特性,同时还有下面的特性:节点是红色或是黑色的 根节点是黑色的 每个叶子的节点都是黑色的(NIL节点) 红色节点的两个子节点都是黑色(不能有连续的红色节点) 任意节点到叶子节点的所有路径都包含相同数目的黑色节点从而保证了红黑树的自平衡,红黑树从根到叶子的最长路径不会超过最短路径的两倍。插入和删除节点的时候,红黑树的规则有可能被打破,如下图:因此,需要变色和旋转..转载 2021-03-05 03:07:44 · 437 阅读 · 1 评论 -
二叉树的遍历
二叉树的遍历主要有三种:(1)先(根)序遍历(根左右)(2)中(根)序遍历(左根右)(3)后(根)序遍历(左右根)中序二叉树的中序遍历就是首先遍历左子树,然后访问当前节点,最后遍历右子树。左-中-右结果:[5,10,6,15,2]1、递归法这是思路最简单的方法,容易想到并且容易实现。递归的终止条件是当前节点是否为空。首先递归调用遍历左子树,然后访问当前节点,最后递归调用右子树。代码如下:/*** 递归*/public List<Int...原创 2021-03-05 00:35:16 · 242 阅读 · 1 评论