![](https://img-blog.csdnimg.cn/20200912171014564.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
数据结构和算法
故明所以
清心、静思、实干、寡言。
展开
-
数据结构之图
图一、为什么要有图二、图的表示方式2.1 邻接矩阵2.2 邻接表三、图的入门案例四、图的遍历介绍4.1 深度优先遍历基本思想4.2 深度优先遍历算法步骤4.3 广度优先遍历基本思想4.4 广度优先遍历算法步骤一、为什么要有图线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图。图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。如图:图的常用概念:(1)顶点(vert原创 2020-07-07 08:37:57 · 281 阅读 · 0 评论 -
数据结构之多路查找树
多路查找树一、2-3树1.1 查找1.2 2-3树的插入实现1.3 2-3树的删除节点二、2-3-4树三、总结二叉排序树简单的实现在多数情况能够达到预期的查找效率,但是每个节点只能存储一个元素和只能有两个孩子,使得在大量数据下会造成二叉排序树的深度特别大,那么在进行查找时多次的访问会造成查找效率的下降,同时,在对二叉查找树进行插入时,可能会破坏二叉查找树的平衡。为了降低对于树的访问次数,实现树的平衡,我们需要新的数据结构来处理这样的问题。多路查找树的每一个节点的孩子树可以多于两个,且每个节点处可以存储多原创 2020-07-06 11:26:36 · 427 阅读 · 0 评论 -
数据结构之平衡二叉树
平衡二叉树(AVL树)一、定义二、平衡二叉树不平衡的情形三、AVL树插入时的失衡与调整(1)左旋(RR)(2)右旋(LL)(3)先左旋再右旋(LR)(4)先右旋再左旋(RL)四、AVL树的四种删除节点方式五、平衡二叉树的性能分析一、定义平衡二叉树也叫自平衡二叉搜索树(Self-Balancing Binary Search Tree),所以其本质也是一颗二叉搜索树,不过为了限制左右子树的高度差,避免出现倾斜树等偏向于线性结构演化的情况,所以对二叉搜索树中每个节点的左右子树作了限制,左右子树的高度差称之为原创 2020-07-06 09:46:34 · 1985 阅读 · 0 评论 -
数据结构之二叉排序树
二叉排序树一、二叉排序树的定义二、二叉排序树的查找算法三、二叉排序树的插入算法四、二叉排序树的删除算法五、二叉排序树性能分析一、二叉排序树的定义二叉排序树又称“二叉查找树”、“二叉搜索树”一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。二叉排序树通常采用二叉链表作为存储结构。中序遍历二叉排序树可得到一个依据关原创 2020-07-06 09:08:22 · 1681 阅读 · 0 评论 -
数据结构之哈夫曼树和哈夫曼树编码
哈夫曼树和哈夫曼树编码一、名词介绍二、哈夫曼树的基本概念三、构建哈夫曼树四、哈弗曼树中结点结构五、哈弗曼树中的查找算法六、构建哈弗曼树的代码实现七、哈夫曼编码八、完整代码(可运行)九、总结一、名词介绍(1)路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。(2)路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。图 1 中从根结点原创 2020-07-05 18:41:04 · 1769 阅读 · 2 评论 -
数据结构之堆排序
堆排序一、堆排序的定义二、堆排序基本思想及步骤2.1 堆排序的基本思想2.2 堆排序的步骤三、堆排序的代码实现四、关于堆排序的总结一、堆排序的定义堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆是具有以下性质的完全二叉树:(1)每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;(2)或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆原创 2020-07-05 18:12:47 · 284 阅读 · 0 评论 -
数据结构之二叉树
二叉树一、二叉树详解(1)满二叉树:(2)完全二叉树:二、二叉树的建立三、二叉树节点查找四、二叉树遍历(1)先序遍历(2)中序遍历(3)后续遍历五、二叉树高度计算六、输出二叉树叶子节点七:递归分析一、二叉树详解树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。首先介绍两个概念:(1)满二叉树:在一棵二叉树中,如果所有分支结点都有左孩子和右孩子结点,并且叶原创 2020-07-04 09:59:15 · 687 阅读 · 0 评论 -
数据结构之树结构
树结构一、树的定义二、二叉树三、查找树ADT-二叉查找树四、AVL树五、伸展树六、B-树一、树的定义树的平均操作时间O(log N)定义树的一种自然方式是递归方法。一棵树是一些节点的集合。这个集合可以是空集;若非空,则这一颗树由称做根的节点r以及0个或多个非空的树T1,T2,……Tk组成,这些子树中每一棵的根都被来自根r的一条有向的边所连接。一棵树是N个节点和N-1条边的集合,其中的一个节点叫做根。在一棵树中从根到每个节点恰好存在一条路径。对任意节点Ni,Ni的深度为从根到Ni的唯一路径的厂。原创 2020-07-04 08:27:17 · 538 阅读 · 0 评论 -
数据结构之哈希表
一、哈希表的定义定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我想我举个例子你就会明白了,最典型的的例子就是字典,大家估计小学的时候也用过不少新华字典吧,如果我想要获取“按”字详细信息,我肯定会去根据拼音an去查找 拼音索引(当然也可以是偏旁索引),我们首先去查an在字典的位置,查了一下得到“安”,结果如下。这过程就是键码映射,在公式里面,就是通过key去查找f(key)。其中,按就是关键字(key),f()就是字典索引,也就是原创 2020-07-03 23:18:40 · 623 阅读 · 0 评论 -
数据结构之七大查找算法
七大查找算法一、顺序查找二、二分查找三、插值查找四、斐波那契查找五、树表查找5.1 最简单的树表查找算法——二叉树查找算法5.2 平衡查找树之2-3查找树(2-3 Tree)5.3 平衡查找树之红黑树(Red-Black Tree)5.4 B树和B+树(B Tree/B+ Tree)5.5 树表查找总结六、分块查找七、哈希查找7.1 什么是哈希表(Hash)?7.2 什么是哈希函数?查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类:(1)静态查原创 2020-07-02 09:10:55 · 3237 阅读 · 0 评论 -
数据结构之算法的(时间复杂度和空间复杂度)
时间复杂度和空间复杂度一、算法的时间复杂度定义二、推导大O阶方法三、推导示例1、常数阶2、线性阶3、对数阶4、平方阶5、立方阶四、常见的时间复杂度五、最坏情况与平均情况六、算法空间复杂度七、计算的规则八、常用算法的时间复杂度和空间复杂度一、算法的时间复杂度定义在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题n的增大,算法执行时间的增长率和f(n)的增原创 2020-06-30 18:07:49 · 511 阅读 · 0 评论 -
数据结构之算法基础
算法基础一、基础概念(1)定义(2)算法的特性(3)评价算法好坏的方法二、时间复杂度计算三、排序和查找3.1 排序3.2 查找一、基础概念(1)定义算法(Algorithm)是一个有穷规则(或语句、指令)的有序集合。它确定了解决某一问题的一个运算序列。对于问题的初始输入,通过算法有限步的运行,产生一个或多个输出。数据的逻辑结构与存储结构密切相关:算法设计: 取决于选定的逻辑结构算法实现: 依赖于采用的存储结构(2)算法的特性有穷性 —— 算法执行的步骤(或规则)是有限的;确定性 ——原创 2020-06-29 22:31:50 · 348 阅读 · 0 评论 -
数据结构之线性结构和非线性结构
线性结构和非线性结构一、线性结构1.1 基本概念1.2 部分实现(1)顺序表(顺序存储)(2)链表(链式存储)(3)栈(4)队列二、非线性结构2.1 相关概念(1)二叉树(2)满二叉树(3)完全二叉树2.2 二叉树存储结构(1)顺序存储(2)链式存储2.3 树与二叉树的转换(1)树转二叉树(2)二叉树转树2.4 树的遍历代码实现一、线性结构1.1 基本概念(1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。(2)线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。原创 2020-06-29 21:23:48 · 3117 阅读 · 1 评论