![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大话数据结构
大猫的Java笔记(公众号同号)
这个作者很懒,什么都没留下…
展开
-
肝了几天我算是理解了红黑树
1.二叉排序树在学习红黑树之前我们需要了解一下二叉排序树,所谓二叉排序树就是一种特殊的二叉树,首先满足二叉树的性质,然后它存储数据的方式是左边节点比父节点的数据小,而右边节点比父节点数据大。这样当我们查询一个数据时,比如我们要找数据8,先从根节点开始,8比12小所以去左子树找,然后与5比较发现比5大那么去右子节点此时就找到了我们需要的数据8。是不是类似于二分查找呢?只需要O(logn)就能找到数据。二叉搜索树(二叉排序树,二叉树查找树),他的时间复杂度取决于树的...原创 2020-06-04 17:52:37 · 233 阅读 · 1 评论 -
堆和堆排序
1.什么是堆?堆是一种特殊的二叉树,满足以下两点的我们称之为堆1.必须是一棵完全二叉树,完全二叉树指树的元素在新增时满足从上到下,从左到右的新增顺序。2.每个节点的值都大于等于或者小于等于左右子树的值。其中每个节点的值大于等于左右子树值的堆我们称之为大顶堆,而每个节点的值小于等于左右子树的值我们称之为小顶堆。从上述图中可以看出图1和图2为大顶堆,而图3为小顶堆,而图4不是堆,原因是因为虽然是一棵二叉树,但是不是一颗...原创 2020-06-04 17:41:33 · 637 阅读 · 1 评论 -
聊聊树与二叉树
1.什么是树现实生活中的树就是有一个主干,加分支加叶子组成的一种植物,大概如下图所示数据结构中的树是什么样子呢?他就像是一个倒着生长的树,对照着两幅图看,是不是很相似。其中圆圈的位置就是数据存放的地方。每个元素我们叫作“节点”,也就是图中的每个圈;用来连线相邻节点之间的关系,我们叫作“父子关系,A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点,...原创 2020-06-04 17:37:58 · 328 阅读 · 1 评论 -
如何使用散列表实现一个O(1)时间复杂度的LRU缓存算法
1.散列表什么是散列表呢?我举这样一个例子,记得小时候家里只有一个座机,但是这个座机不能存电话号码,于是只能将要联系的人的电话号码写在一个本子上。时间久了本子上的电话号码越来越多。然后这个时候要去找某一个指定的联系人的时候发现很难找到。如果是你你想想一下应该怎么样才能快速找到呢? 其实我们每次新增一个联系人的时候可以将他的姓的首字母取出来,然后所以首字母相同的都在一个区间,也就是做一个目录。 例如张三,我们就将他放在Z字母的地方,同时如果Z字母的联系人又在520页的话...原创 2020-06-04 17:31:24 · 719 阅读 · 2 评论 -
非比较排序--基数排序实现给字符串数组排序
1.计数排序的局限性前面学习了计数排序,可以实现O(n+k)的时间复杂度,但是他有很大的局限性,最大的问题就是如果最大值和最小值之间相差太大的话,那么会浪费掉很大的空间,比如要排序{1,10000,99,64,120}我们可以根据之前的计算公式最大值减去最小值加一得到计数数组的长度,那么计数数组长度就应该是10000,但是实际上我们只存放了5个数据,中间浪费了极大的空间,所以在...原创 2020-04-30 17:24:13 · 905 阅读 · 1 评论 -
非比较排序-计数排序
1.计数排序前面学习了归并排序,快速排序时间复杂度为O(n*logn)而有没有比这更快的排序算法呢?当然是有的那就是计数排序,首先计数排序并不是比较排序算法,而是利用数组来实现的一种算法,想象一下这样一个场景,假如给数组{1,4,5,1,3}做一个排序,我们可以看出其中最大的值就是5,但是怎么利用数组实现排序呢?我们知道数组是一组连续的地址空间,且可以通过下标进行随机访问,数组...原创 2020-04-30 17:21:12 · 213 阅读 · 1 评论 -
为什么插入排序比冒泡排序更受欢迎?
1. 插入排序和冒泡排序的时间复杂度插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?2. 先看一下排序算法的几个概念1.原地排序原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) ,的排序算法;因为只需要定义变量来交互值,所以...原创 2020-04-30 17:13:51 · 596 阅读 · 1 评论 -
选择排序、归并排序、快速排序
1.选择排序选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。Java代码实现如下。ps:选择排序的最好情况时间复杂度、最坏情况和平均情况时间复杂度都为 O(n2),同时选择排序不是稳定的排序算法,选择排序只需要常量的内存空间消耗...原创 2020-04-30 17:06:13 · 744 阅读 · 1 评论 -
《大话数据结构》栈的顺序存储及链式存储
1. 简介很多男孩子小时候肯定玩过玩具枪,如果你小时候没有玩过那你一定在游乐园里玩过玩具枪打气球的游戏。我小时候玩玩具枪时最喜欢的就是收集子弹,捡邻居家孩子打完后的子弹,这样可以重复利用,我自己也不用花钱买子弹。 想想一下玩具枪上子弹的过程,先取下弹夹,然后将一颗颗的子弹放到弹夹里,然后先被放进去的子弹最后被射出来,最后放进去的子弹最先被射出来。而这种先进后出,后进先出的就是栈...原创 2019-11-27 16:42:28 · 888 阅读 · 0 评论 -
《大话数据结构》队列的顺序存储和链式存储
1. 简介成都的火车南站早上真的恐怖,地铁站人山人海,从地铁里面一直排队到门口,虽然人很多但是不得不说我国人民素质还是蛮高的,都是来了之后排在队伍的最后面,没有一个人去插队。这样不仅避免了人员拥挤的混乱,也让需要乘坐地铁的人可以尽快乘上地铁。 其实我们的队列就像排队等地铁一样,遵从先来后到,先来的人先上车后来的人后上车,队列则是先插入的数据,先取出去,后来的数据后取出去,先进先...原创 2019-12-12 09:42:19 · 1340 阅读 · 0 评论 -
《大话数据结构》线性表的顺序存储结构
1. 什么是线性表 以前上幼儿园每当放学的时候,每个班都需要按照高矮顺序排成一列进行一起走出校门,除第一位同学以外每一个同学前面都仅有一个同学,而除了最后一个同学外每一个同学后面都仅有一个同学,当时老师让每一个同学记住自己前面和后面是谁,如果谁没来就告诉老师,这样老师就可以知道全班同学是否到都在。 同样线性表也是如此,每一个元素前后都仅有一个元素(第一个元素无前驱,最后一个元素...原创 2019-10-23 23:34:03 · 909 阅读 · 1 评论 -
线性表的链式存储结构
1. 什么是线性表的链式存储前面我们看过线性表的顺序存储结构,他是通过数组开辟一段连续的地址空间来实现的,在做插入操作和删除操作时,因为要维护数组的结构所以时间复杂度为O(N);有什么办法可以解决删除和插入操作效率低的办法吗?没错就是链表,我们只需要在保存当前数据的同时,也保存其下一个元素的地址就行了,这样在删除和修改时实际上并不需要维护结构,只需要改变被删除或被插入数据上一个的地址...原创 2019-11-12 23:35:47 · 2077 阅读 · 1 评论