数据结构与算法
基础
DoNow☼
基础中的基础,建议看其他博主的博客。
展开
-
B树与B+树
重温数据结构:理解 B 树、B+ 树美团技术漫画:什么是B+树?B树 是一种平衡多路查找树,满足平衡二叉树特性,不同的是每个节点不止两个子树,同时B树每个节点有多个数据(关键字),相同的是B树也满足左小右大特性。B树与平衡二叉树图可以看到B树更加的矮和胖,存储的信息更多,这在磁盘中查找数据(先读取到内存后查找)更加的快,减少了IO次数,提高了查询效率。说说B+树B+...原创 2020-02-29 20:09:24 · 244 阅读 · 0 评论 -
数据结构-红黑树(平衡二叉查找树)
平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于1。平衡二叉查找树不仅满足上面平衡二叉树的定义,还满足二叉查找树的特点,最先被发明的平衡二叉查找树是AVL树,它严格符合我刚讲到的平衡二叉查找树的定义,即任何节点的左右子树高度相差不超过1,是一种高度平衡的二叉查找树。很多平衡二叉查找树并没有严格满足上面的定义,比如红黑树,它从根节点到各个叶子节点的最长路径,有可能...原创 2020-02-29 15:28:10 · 245 阅读 · 0 评论 -
数据结构-二叉查找树
二叉查找树是二叉树最常见的一种类型,是为了实现快速查找而存在的, 最大的特点是支持快速的增删查,中的每个节点的值都大于左子树节点的值**,小于右子树节点**的值。二叉查找树的特点是任意一个节点的左子树小于当前节点,右子树大于当前节点。对于存在重复数据的二叉查找树,我介绍了两种构建方法,一种是让每个节点存储多个值相同的数据;另一种是每个节点仍然只存储一个数据。在查找插入位置的过程...原创 2020-02-29 14:20:29 · 160 阅读 · 0 评论 -
数据结构-二叉树
树:我们平时最常用的树就是二叉树,二叉树的每个节点最多有两个子节点,分别是左子节点和右子节点。二叉树中,有两种比较特殊的树,分别是满二叉树和完全二叉树。满二叉树又是完全二叉树的一种特殊情况二叉树既可以用链式存储,也可以用数组顺序存储。数组顺序存储的方式比较适合完全二叉树,其他类型的二叉树用数组存储会比较浪费存储空间。,关于“树”,还有三个比较相似的概念:高度(Height)、深度(...原创 2020-02-29 11:13:03 · 118 阅读 · 0 评论 -
数据结构-散列表
散列表的英文叫Hash Table,我们平时也叫它哈希表或者Hash表,散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。散列表两个核心问题是散列函数设计(hash算法)和散列冲突解决。散列冲突有两种常用的解决方法,开放寻址法和链表法(hashMap采用的就是链表法)。散列函数设计的好坏决定了散列冲突的概率,也就决定散列表的性能。...原创 2020-02-28 20:03:15 · 150 阅读 · 0 评论 -
数据结构-跳表
跳表是基于有序链表的一种二分查找法,通过构建多级索引(空间换时间),来提高查询的效率,因此跳表的删除、添加、查询,时间复杂度都不高,都为O(log n),但是空间复杂度有点高为O(n);图跳表索引动态更新极端的情况下,动态的添加元素,两个索引之间可能会有非常多的数据,这个时候两个索引的数据相当于单链表。那如何来解决这个问题呢,我们可以通过随机函数来决定这个数要插入到多少级的缓存...原创 2020-02-28 18:31:56 · 141 阅读 · 0 评论 -
算法-二分查找法
二分查找法也叫折半查找法,每次折半进行查找,具有一定的局限性,依赖于顺序表结构以及数组,也就是说数据要是有序的,且每次都要通过下表来随机访问数据。代码public int bsearch(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high) { int mid = (l...原创 2020-02-28 17:17:54 · 127 阅读 · 0 评论 -
数据结构-队列
队列: 和前面的栈类似,只允许入队与出队,有先进先出,后进后出的特点,类似排队买票,也是一种操作受限的线性表数据结构。在多线程里学过的阻塞队列、并发队列中的队列指的就是这种队列。队列也有两种实现方法,通过数组或者链表。通过数组实现的队列叫做顺序队列,通过链表实现的叫做链式队列。因为队列是先进先出,所以当用数组来实现的时候,会有数据搬移的情况出现,那么这个时候出现了循环队列可解...原创 2020-02-28 16:36:19 · 117 阅读 · 0 评论 -
数据结构-栈
栈: 满足先进后出,后进先出,只有入栈与出栈两种操作,是一种操作受限的线性表,只允许再一端删除与插入。栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。代码...原创 2020-02-28 14:12:26 · 126 阅读 · 0 评论 -
数据结构-链表
链表是不需要连续的内存空间,通过指针将一组零散的内存块关联起来,同时我们将内存块称为结点,结点除了存储当前数据,还要记录下一个结点的地址。由于链表是不连续的内存空间,所以查询的时候,时间复杂度为O(N),但是删除和新增时间复杂度为O(1),但是当你需要删除节点的时候,你需要先找到这个节点,而找到这个节点的时间复杂度为O(N)。链表分为 单链表,循环链表,双向链表,双向循环链表...原创 2020-02-28 13:32:21 · 87 阅读 · 0 评论 -
数据结构-数组
什么是数组 : 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。什么是线性表: 数据向线一样的数据结构,只有前后两个方向。因为在内存中数组具有连续的内存空间与相同的类型,所以数组支持随机访问,所以数组的查询效率非常高效,时间复杂度为O(1)。但是由于要保证数组内存空间的连续性,也带来了不好的影响,删除与插入的时候时间复杂度为O(n),当然最好的情...原创 2020-02-28 11:21:57 · 121 阅读 · 0 评论 -
排序算法-冒泡、选择、插入、希尔
参考:https://www.cnblogs.com/onepixel/p/7674659.html定义与分类:顾名思义,排序算法是为了给一定范围内的数字进行从小到大或者从大到小进行排序,分为比较类排序与非比较类排序。比较类排序: 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序非比较类排序:不通过比较来决定元素间的相对次序,它可...原创 2020-02-24 10:25:42 · 210 阅读 · 0 评论 -
数据结构与算法-概念
数据结构就是指一组数据的存储结构算法就是操作数据的一组方法。两者相辅相成,算法是为数据结构服务的。其中复杂度是数据结构与算法中最重要的概念复杂度也叫渐进式复杂度,通常用大O来表示分为时间复杂度与空间复杂度,用来分析算法的执行效率与数据规模的增长关系。分析复杂度的时候,低阶(n)、常量、系数三部分可以忽略一般计算复杂度,说的都是最坏的那种有最好、最坏、平均、均摊时间...原创 2020-02-20 15:53:28 · 109 阅读 · 0 评论