数据结构与算法
文章平均质量分 88
*闲鱼
一名摆烂的全能fw
展开
-
链式哈希表
已知一组关键字为{19,14,23,01,68,20,84,27,55,11,10,79},哈希函数为H=keyMOD13,这样呢我们的哈希地址就是0~12,将19对13取余为6,将19存放在地址为6的页表中,14放入1中,23放入10中,接着就会发现01对13取余也是1,发生了哈希冲突,14已经放入了1中,因此我们就一直向后移动,2为NULL,我们就将01放入地址为2的页表中,就是这种方法,向后遍历,直到找到没有存放关键字的地址,将关键码放入其中即可。这个映射函数叫做散列函数,存放记录的数组叫做散列表。原创 2022-12-21 18:04:21 · 412 阅读 · 0 评论 -
【AVL树】
一棵AVL树或者是空树,或者是具有谢下列性质的二叉搜索树:他的左子树和右子树都是AVL树,且左子树和右子树的高度只差的绝对值不超过1.如上图,左边的二叉搜索树每个结点的左右子树高度差的绝对值小于1,所以是AVL树,右边的树不是每个结点的左右子树高度差的绝对值小于1所以不是AVL树。每个结点附加一个数字,给出该结点右子树的高度减去左子树的高度所得的高度差。这个数字既是为结点的平衡因子balance。根据AVL树的定义,任何一个结点的平衡因子只能取-1,0,1。如果一个结点的平衡因子的绝对值大于1,则这颗原创 2022-12-05 13:28:14 · 293 阅读 · 0 评论 -
二叉搜索树
从二叉排序树中查找一个关键码:我们知道左子树的关键码必然小于根节点的关键码,根节点的关键码必然小于右孩子的关键码。所以遍历时仅仅需要判断要查找的关键是否大于根节点的关键码,大于在右边找,继续判断右子树的根节点关键码与要查找的关键码大小,反之在左子树进行查找。如上三图,如果一颗而擦函数进行中序遍历,可以按从小到大的顺序,将各节点关键码排序起来,所以也称二叉搜索树为二叉排序树。一棵二叉搜索出存在三个指针,左右孩子和双亲指针,还有一个关键码。二叉搜索树又叫二叉排序树,其或者是一棵空树。原创 2022-11-28 22:21:33 · 172 阅读 · 0 评论 -
赫夫曼树赫夫曼编码的创建
下图的结点均为叶子节点,我们首先在其中找到权值最小的两个结点,构造一棵而二叉树,比如下面结点我们以做一个左孩子权值为3右孩子权值为5,双亲权值为8的二叉树,然后将权值为8左孩子和右孩子编号为7和1的结点加入下面结点中,就这样选过的不再继续选,将新建立的结点加入其中,每次选出权值最小的两个结点,一直循环下去,直到遍历完所有的结点即可。从树的一个结点到另一个结点之间的分治构成这两个结点之间的路径,路径上的分支数目称作路径长度。我们发现不同路径权值相同,其带权路径长度不同,而最小的便是我们的赫夫曼树。原创 2022-11-24 15:24:19 · 388 阅读 · 0 评论 -
二叉树的建立和遍历
在二叉树的存储中,我们发现在创建二叉树函数的时候,,它的参数是char* &str,此处的&是c++中的引用,什么是引用呢?格式为:类型 &引用变量名 = 已定义过的变量名。例如:,此处的引用b便是a的重命名,怎么理解呢,其实a,b指的是同一个变量,a,b只是他不同的名字。此处为什么用引用呢,如果去掉引用会发生什么呢?在数组元素等于ABC##DE##F##G#H## 的时候,输出值会发生错误,发现只在abc之间,不会遍历到后面的元素。怎么样的思路呢,我们递归调用函数时,比如A结点接下来进入左孩子调用原创 2022-11-22 21:14:08 · 2898 阅读 · 0 评论 -
分治策略与递归
例如:对于n个元素的排序问题,当n=1时,不需要任何计算,当n=2时,只要做一次比较即可排序好,n=3时,只要进行两次比较即可,当n越来越大,这个问题的就不那么容易处理了。要想直接解决一个较大的问题,比较困难。,便于各个击破,分而治之,如果原问题可以分割成k个子问题,1原创 2022-11-18 20:59:26 · 460 阅读 · 0 评论 -
【二叉树的存储及遍历】
树是由n(n>=0)个结点组成的优先集合。如果n等于0,称为空树;但如果n>0,则1)有一个特定称为根的结点,他只有直接后继,没有直接前驱。2)除根节点之外的其他节点分为m(m>=0)个互不相交的有限集合,每个集合又是一棵树,并且称之为根的子树。每个子树的根结点有且只有一个直接前驱,但是可以有0个或多个直接后继。原创 2022-11-17 16:14:45 · 460 阅读 · 0 评论