数据结构与算法
文章平均质量分 79
详解常用的八大数据结构(数组,栈,队列,链表,树,散列表,堆,图),解读七大查找算法(顺序查找,二分查找,插值查找,斐波那契查找,树表查找,分块查找,哈希查找)和十大排序算法(冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序,计数排序,桶排序,基数排序)
书山客
学无止境
展开
-
数据结构与算法解析
1、数据结构1-1 数组1-2 链表1-3 栈持续更新中…原创 2020-08-04 14:17:08 · 482 阅读 · 0 评论 -
一文读懂特殊的树结构——堆
定义堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。根据结点特征可以将堆分为大顶堆和小顶堆两种,将根节点最大的堆叫做最大堆或大顶堆,根节点最小的堆叫做最小堆或小顶堆。性质1.堆中某个节点的值总是不大于或不小于其父节点的值。2.堆总是一棵完全二叉树。...原创 2020-10-22 18:42:02 · 240 阅读 · 1 评论 -
一文读懂复杂的树结构——红黑树
红黑树定义和性质红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:性质1:每个节点要么是黑色,要么是红色。性质2:根节点是黑色。性质3:每个叶子节点(NIL)是黑色。性质4:每个红色结点的两个子结点一定都是黑色。性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。从性质5又可以推出:性质6:如果一个结点存在黑子结点,那么该结点肯定有两个子结点红黑树的结构红黑树的结构如下图所示红黑树并不是一个完美平衡二叉查找树,从上图可以看到,根结点P的左子树显然比右子树原创 2020-09-22 10:38:40 · 583 阅读 · 0 评论 -
一文读懂进阶的树结构——B+树
B+树上节我们简单了解了B-树的特性和使用,这节我们来学习B-树的变形结构——B+树原创 2020-09-14 14:23:13 · 964 阅读 · 1 评论 -
一文读懂特殊的树结构——B-树
B+树原创 2020-09-07 09:05:03 · 362 阅读 · 0 评论 -
一文读懂特殊的树结构——哈夫曼树
哈夫曼树哈夫曼树也叫最优二叉树,是带权路径长度最短的树。路径长度根结点到第L层结点路径长度为L-1带权路径长度(WPL)树中所有叶子节点到根节点的路径长度与该叶子节点权值的乘积之和特性:• 哈夫曼树不一定是唯一的。• 哈夫曼树的左右子树可以互换,这样做并不影响树的带权路径长度。• 带权值的节点都是叶子节点,不带权值的节点都是某棵子二叉树的根节点。• 权值越大的节点越靠近哈夫曼树的根节点,权值越小的节点越远离哈夫曼树的根节点。• 哈夫曼树中只有叶子节点和度为2的节点,没有度为1的节原创 2020-08-18 16:31:51 · 4466 阅读 · 3 评论 -
一文读懂较复杂的数据结构——树,二叉树
树树是n(n>=0)个结点构成的有限集,n=0时称为空树,在任意一棵非空树中有且仅有一个结点称为根结点,其余结点可分为m(m>0)个互不相交的有限集,每个有限集又是一棵树,它们称为根结点的子树。术语解释结点的度当前结点向下直接连接的结点的个数树的度树中所有结点的度的最大值子结点一个结点含有的子树的根结点称为该结点的子结点父结点若一个结点含有子结点,则这个结点称为其子结点的父结点兄弟结点拥有同一父结点的结点互为兄弟结点叶结点没有子树的结点叫做叶结点祖先结原创 2020-08-15 00:04:26 · 466 阅读 · 0 评论 -
一文读懂较复杂的数据结构——散列表
专栏目录(数据结构与算法解析):https://blog.csdn.net/qq_40344524/article/details/107785323散列表散列表也叫哈希表,它是根据键值关系对数据进行直接访问的数据结构,通常是通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。事实上散列表的的基础就是数组,由于数组可以在短时间内实现任意位置的访问也就保证了散列表能够快速访问任意位置的数据。在使用散列表的过程中最重要的就是散列函数的选择,通原创 2020-08-11 08:28:05 · 827 阅读 · 0 评论 -
一文读懂简单的数据结构——队列
队列上节对栈进行了介绍,今天我们来介绍另一个特殊的线性数据结构——队列,队列只能在一端插入数据,另一端删除数据,它和栈一样,也是一种操作受限制的线性表,进行插入操作的称为队尾,进行删除操作的称为队头,队列中的数据被称为元素,没有任何元素的队列称为空队列。由于只能一端删除或者插入,所以只有最先进入队列的才能被删除,因此队列是先进先出结构的。具体见下方操作演示图:图:队列操作示意图通过上述图片可以发现,队列形似一条管道,通常只有一个进水口和一个出水口,因此最先进入队列的元素自然而然会先出队列。原创 2020-08-07 17:11:09 · 292 阅读 · 0 评论 -
一文读懂简单的数据结构——栈
栈栈是限定只能在表尾进行插入或删除操作的线性表,在学习栈的相关操作之前我们要先记住几个概念:栈底,栈顶,空栈,入栈(压栈),出栈概念解释栈底线性表的尾部位置叫做栈底,它有一些特殊含义,后续在讲解代码时会讲到栈顶线性表的表头位置叫做栈顶,它是出栈和入栈的操作位置空栈当定义为栈的线性表中不存在任何元素的时候该线性表叫做空栈入栈也叫压栈,是指将元素放到栈中,此时栈顶指针要上移一位出栈将栈顶元素从栈中取出,栈顶指针下移一位栈的具体操作过程见如下演示图从以上图例演示中我们可以看出原创 2020-08-03 17:09:28 · 445 阅读 · 0 评论 -
一文读懂简单的数据结构——链表
链表是一种物理存储单元上非连续、非顺序的存储结构,链表中的数据随机的分布在内存中的各个位置,没有特定限制,这种存储结构又被称为线性表的链式存储。单链表单链表又称为单向列表,该链表的访问顺序是单向的,由于链表中各元素是分散存储的,所以为了能够体现出元素之间的逻辑关系,在单链表中每个数据元素在存储的同时,要配备一个指针,这些配备有指针的结构我们会统称为结点,在单链表中每个结点都会包含一个数据域和一个指针域,数据域用于存储各结点的元素数据,指针域用于指向它的直接后继结点,即每一个数据元素都指向下一个数据元素(原创 2020-08-01 00:45:43 · 1258 阅读 · 0 评论 -
一文读懂最简单的数据结构——数组
数组详解定义:有序的元素序列,数组是用来存储具有“一对一”逻辑关系的数据的线性存储结构,由于在各种编程语言中常把数组作为基本数据类型来使用,很多人会误解数组不是存储结构。通常我们根据不同的结构特性将数组分为三类:一维数组,二维数组和多维数组(存储(n-1)维数组的数组,不做过多讨论)本节中我们主要针对一维数组进行详细讲解,分析数组的应用场景,使用方法及其优缺点。一维数组:一维数组是指存储单个元素的数组,以整形数组为例,通常C语言中我们会将其定义为:int array[n],其中n表示数组中可存原创 2020-07-27 19:50:25 · 488 阅读 · 0 评论