数据结构
zhapeng1
这个作者很懒,什么都没留下…
展开
-
AVL树的C++实现(2)
之前介绍了如何添加的元素位于不平衡节点左侧的左侧及右侧的右侧时如何处理,那么这篇首先介绍如何解决添加元素位于不平衡节点左侧的右侧及右侧的左侧该怎么处理。LR插入节点z位于x的右侧,此时问题比之前复杂一点,一次旋转并不能解决问题。因为T1<x<T2<z<T3<y<T4T1<x<T2<z<T3<y<T4T1<x<T2<z<T3<y<T4,将x先进行左旋转。此时的情况就和之前右旋转的情况一致,只需要对y原创 2020-07-05 11:57:34 · 159 阅读 · 0 评论 -
AVL树的C++实现(1)
为什么要AVL在之前的介绍的二分搜索树中,我们发现它查找、添加、删除元素的复杂度为O(logn)O(logn)O(logn)级别,但是在某些特殊情况下,比如在添加1,2,3,4,5,6时,你期望能够添加完成为左边的树,但是如果按顺序添加就会退化成链表,复杂度变为O(n)O(n)O(n)级别。此时这种二叉树就成为一种不平衡二叉树,而AVL树就是解决这种不平衡二叉树一种方法。平衡二叉树从字面上理解就是这棵树要尽量的平衡。但是对于平衡有不同的定义,比如之前说的堆,它是一棵完全二叉树,空缺部分只能出现在右下原创 2020-06-30 15:37:03 · 254 阅读 · 0 评论 -
并查集及相关改进的C++实现
并查集是一种不一样的树形结构,它主要的作用是解决连接问题。比如判断下图中的两个节点是否相连,如果是相邻的两个点那么可以很快判断出来,但是对于相隔较远的点就需要使用并查集来判断了。在现实生活中我们主要使用连接问题判断网络之间的连接关系,这种网络包括计算机网络以及社交网络等等。实现在并查集中我们需要实现的功能主要就是实现两个元素合并为同一个集合下 union(p,q)union(p,q)union(p,q)查看某个元素属于哪一个集合 find(p)find(p)find(p)判读两个元素是否连接原创 2020-06-27 18:59:19 · 125 阅读 · 0 评论 -
二分搜索树的实现以及相关操作 C++实现
二分搜索树这种数据结构主要是用于查找功能的,在介绍二分搜索树之前先简单介绍下二分搜索,对于一个有序数组,首先找到中间元素v,如果等于那就太好了,如果比v小,那么就从小于v的部分继续查找,反之亦然。那么这个过程的时间复杂度就是O(logn)O(logn)O(logn)。二分搜索树主要是用于查找表的实现,也称为字典数据结构。就是每个数据有Key值和Value值,通过对Key值得搜索得到value值。如果使用数组实现查找表,首先可能存在key值非数字,无法排序的情况,其次如果查找表元素比较稀疏,使用数组可能并不原创 2020-06-17 16:31:47 · 352 阅读 · 0 评论