![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 85
程序员的暴击
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
数据结构之图
简介一种非线性表数据结构,图(Graph)。和树比起来,这是一种更加复杂的非线性表结构。当我们需要表示多对多的关系时,图就发挥了作用图中的元素我们就叫作顶点(vertex)。 图中的一个顶点可以与任意其他顶点建立连接关系。我们把这种建立的关系叫作边(edge)在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。无向图:无向图是由顶点和边构成。有向图:有向图是由顶点和有向边构成。带全图:每条边都有一个权重(weight)入度–就是在有向图中原创 2021-05-30 17:36:40 · 294 阅读 · 0 评论 -
数据结构之B+树及其实现
上一篇 B树及其实现下一篇 红黑树及其实现简介B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度B+树是B树的变体,也是一种多路搜索树。B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存有关键字其数据的地址,所以这种数据检索的时候会要比B+树快。B+树性质:1 B+树的搜索与B原创 2021-04-27 22:23:22 · 2720 阅读 · 0 评论 -
数据结构之B树实现
上一篇: 赫夫曼树及赫夫曼编码简介B-Tree是为磁盘等外存储设备设计的一种平衡查找树,是一种多路树。它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。 与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。B树是一种多路查找树,其类似的还有2-3树,2-3-4树 都是B树只是结构更加简单为什么要引入B树?(1)系统从磁盘读取数据到内存时是以磁盘块(block)原创 2021-04-27 18:48:47 · 262 阅读 · 0 评论 -
赫夫曼树及赫夫曼编码
上一篇 字典树赫夫曼树简介给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近路径:在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径下图:根节点到F节点路径为:A ->B->D->F路径长度在一棵树中,从一个结点到另一个结点所经过的“边”的数量,被我们称为两个结点之间的路径长度;若规定原创 2021-04-27 14:36:34 · 338 阅读 · 0 评论 -
数据结构之字典树
字典树又称为前缀树或Trie树。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。比如搜索引擎的关键字提示功能就用到了字典树优点:利用字符串的公共前缀可以减少查询字符串的时间,能够最大限度的减少无谓的字符串比较,同时在查询的过程中不需要预知待查询字符串的长度,沿着字典树的边进行匹配。字典树的基本性质:1 根节点没有字符路径。除根节点外,每一个节点都被一个字符路径找到;2 从根节点出发到任何一个节点,如果将沿途经过的字符连接起来,一定为某个加入过的字符串的前缀;原创 2021-04-26 19:46:32 · 118 阅读 · 0 评论 -
数据结构之平衡二叉树(AVL树)
前一篇 二叉排序树平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。是在二叉排序树的基础上的优化与扩展。为什么要引入平衡二叉树?普通的二叉树缺陷当左子树或者右子树全部为空,从形式上看,更像一个单链表.虽然插入速度没有影响但 查询速度明显降低(因为需要依次比较另一个树的分支), 不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢平衡二叉树的特点它是一棵空树或它的左右两个子树的高度差的绝原创 2021-04-26 18:17:47 · 203 阅读 · 0 评论 -
数据结构之二叉排序树
二叉排序树二叉查找树是二叉树中最常用的一种类型,也叫二叉排序树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找一个数据,还支持快速插入、删除一个数据二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点二叉排序树的插入新插入的数据一般都是在叶子节点上,所以我们只需要从根节点开始,依次比较要插入的数据和原创 2021-04-26 16:03:10 · 226 阅读 · 0 评论 -
数据结构之二叉树
树树是一种数据结构,由n(n>=1)个有限结点组成的一个具有层次关系的集合。每颗树都有一个根结点,根结点下有若干个子结点,每一个非根结点有且只有一个父结点。除了根结点外,每个子结点又可以分为多个不相交的子树。树的基本术语①结点:包含一个数据元素及若干指向子树分支的信息。②结点的度:一个结点拥有子树的数目称为结点的度。③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点。④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。⑤树的度:树中所有结点的度的最大值。⑥结点的层次:从原创 2021-04-26 15:18:51 · 177 阅读 · 0 评论 -
数据结构之树堆及堆排序
目 录: 一、堆的基本概念 二、堆的实现 1 往堆中插入一个元素 2、删除堆顶元素 3、时间复杂度分析 三、堆排序 1、建堆 2、排序 四、堆的应用 应用一:优先级队列 应用二:利用堆求Top K 应用三:利用堆求中位数 一、堆的基本概念 堆是一种特殊的树,只要满足下列两点要求,就符合堆的定义: 1、堆是一棵完全二叉树; 2、堆中的一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 回顾:完全二叉树:除了最后一层,其他层的节.转载 2021-04-26 11:43:30 · 505 阅读 · 0 评论 -
数据结构之跳表实现
增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。-----来自百度百科它的效率和红黑树以及 AVL 树不相上下,但实现起来比前面两个要简单得多、跳表具有非常优秀的查找、插入、删除性能,并且是天然的动态数据结构。其查询、插入、删除的时间复杂度均为O(logn)跳表的引入跳表的查找跳表的查找需要从原创 2021-04-26 11:10:21 · 392 阅读 · 0 评论 -
数据结构之散列表
散列表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表散列表的结构如下散列表使用关键字key的值直接访问记录,加快访问速度比如:1 使用哈希表作为java程序和数据的缓存层,将经常使用无需向数据库插入的数据放入哈希表中,提高对数据的访问能力。降低数据库的负载压力2 数据字典;微信通讯录右边的搜索索引优点:一对原创 2021-03-26 16:59:14 · 556 阅读 · 0 评论 -
数据结构之栈(Stack)
简介栈是一种线性结构,具有先进后出的特点,即先入栈的最后出栈。删除时刚好相反:最后放入的元素最先删除,最先放入的元素最后删除。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。入栈示意图出栈示意图栈是集合Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了原创 2021-02-23 11:13:54 · 822 阅读 · 0 评论 -
数据结构之红黑树完整代码实现
最近学习了红黑树,自己实现了其插入删除功能。总结下:一、什么是红黑树红黑树是一种弱平衡二叉树,它拥有二叉树的基本性质:任意一个节点的值大于左节点的值小于右子节点的值。和AVL一样都是在插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。二、红黑树的性质(1) 每个节点或者是黑色,或者是红色。(2) 根节点是黑色。(3) 每个叶子节点(NIL–虚拟节点,节点为null的节点)是黑色.(4) 每个红色节点的两个子节点一定是黑色,不能有2个相连的红色节点(5) 任意一个节点到原创 2020-11-24 23:42:19 · 711 阅读 · 0 评论 -
数据结构之双链表代码实现
一 什么是双链表双链表是一种基本数据结构。每个数据结构都包含三部分:前指针,当前数据值,后指针。前指针用来指向前一个元素即前驱,后指针用来后一个元素即后继。这样就形成了链条。其节点结构图如下:其数据结构图如下:如果first的前指针指向last的元素且last的后指针指向first元素则形成双向循环链表。在JDK7以前LinkedList是双向循环链表,JDK7则改成了非循环双链表。所以在浏览些老的文章说其为循环双链表也不为过。本文的主角LinkedList就是双链表结构内部声明了Node类原创 2020-11-28 16:27:25 · 454 阅读 · 0 评论 -
数据结构之单链表
简介链表是有序的列表,它是构成单链表的基本结点结构。 在结点中数据域用来存储数据元素,指针域用于指 向下一个具有相同结构的结点。 因为只有一个指针结点,称为单链表。单链表其内存存储结构其逻辑结构图特点1 链表是以节点的方式来存储的2 每个节点包含data域,存放值,next域指向下一个节点的指针3 链表的各个节点不一定是连续存储的4 链表分带头节点的链表和不带头节点的链表,根据实际需求来确定单链表结点头结点:有时,在链表的第一个结点之前会额外增设一个结点,结点的原创 2021-02-14 10:04:20 · 432 阅读 · 0 评论 -
数据结构之队列
什么是队列Queue什么是队列?队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。队列是一个有序列表,可以用数组或是链表来实现。使用数组的顺序队列,使用链表的为链式队列。队列遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。特点队列的尾部添加数据的;拉取数据是从队列头部拉取的,拉取完之后将该元素删除。使用场景一般情况下,如果是对一些及时消息的处理,并且处理时间很短的情况下是不需要原创 2021-02-08 10:47:53 · 819 阅读 · 0 评论 -
数据结构之稀疏数组
定义普通数组的压缩,目的是节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率。1 记录数组一共有几行几列,有多少个不同的值2 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模,此小规模的数组叫做稀疏数组使用场景当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存这些数据,以节省存储空间。特点稀疏数组从第一行保存原来数组的行,列与有效值(非空的值)稀疏数组的第二行开始,以后的每行的第一列保存原来数组的行,第二列保存原创 2021-02-07 18:29:20 · 161 阅读 · 1 评论