![](https://img-blog.csdnimg.cn/20191213152751430.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
HelloQueenJessica
Love is a touch yet not a touch
展开
-
堆
文章目录堆的定义堆的实现堆排序VS快排堆的定义两点要求:完全二叉树每一个节点的值都大于等于(或小于等于)其子树中每个节点的值堆的实现其实堆的实现关键的就是两个操作:下沉和上浮所谓下沉就是针对某个元素,让其向下交换到一个满足堆定义的位置而上浮与下沉刚好相反,而且上浮比下沉要简单一点,因为一个节点可能有两个孩子,但是只能有一个父节点。所谓的heapify,也就是堆的构建,也就是...原创 2019-12-17 11:23:06 · 174 阅读 · 0 评论 -
十种基本排序算法
介绍10种排序算法,并给出Java实现原创 2019-12-16 15:11:19 · 214 阅读 · 0 评论 -
队列
文章目录概述ArrayQueue数组队列LoopQueue循环队列LinkedListQueue链式队列概述队列也是一种受限制的线性表,大家都知道它的特性是先进先出,根据内部数据结构的不同,可以分为顺序队列和链式队列,而对于数组实现的顺序队列,可以通过循环队列的方式提高其效率,而循环队列也是应用最多的一种队列(因为循环队列可以配合CAS实现并发队列)队列的一个很重要的应用是对于有限资源的排队...原创 2019-12-15 19:12:30 · 144 阅读 · 0 评论 -
动态数组
文章目录思路介绍代码实现思路介绍动态数组的思路比较简单,除了基本的数组操作,需要关心的就是一个扩容的问题,而扩容无非就是重新申请一块内存,然后进行数据拷贝,再将数据指针指向新的数组代码实现/** * @Classname MyArray * @Description 动态数组 * @Date 2019/12/15 17:38 * @Created by SunCheng */p...原创 2019-12-15 18:08:35 · 84 阅读 · 0 评论 -
栈
设计思路栈这种数据结构实现起来非常简单,主要有以下几个方法push()pop()peek()size()isEmpty()考虑一个问题,栈算是一种操作受限的线性表,那我们为什么还要用栈,而不是直接用链表或者数组或者什么别的数据结构,反正栈内部也是用了这些数据结构实现的?这个问题可以这么考虑:暴露的接口越多,操作越灵活,程序就更加的不可控所以,使用栈的目的就是让你只关心与...原创 2019-12-14 14:45:59 · 58 阅读 · 0 评论 -
单链表
文章目录1. 设计思路2. 辅助函数3. 增加元素4. 删除元素5. 修改元素6. 查找元素1. 设计思路单链表是一个很常见的数据结构,整体思路比较简单,容易出问题的地方就是边界处理,所以这里有一个小技巧:设立哨兵,也就是我们常用的dummyHead,然后根据是否采用哨兵,顺势就把链表分成了带头链表(有哨兵)和不带头链表几个常用的边界检查(极客时间·王争)链表为空时,代码能否正常工作?...原创 2019-12-14 12:06:05 · 237 阅读 · 0 评论 -
LRUCache的Java实现
文章目录思路介绍LinkedHashMap实现ArrayList实现反例:对哈希链表的误解手动哈希链表实现LeetCode传送门思路介绍LRU缓存的机制非常容易理解,代码实现思路也非常简单get方法时,如果元素存在,记得更新其位置信息put方法时,要根据容量决定是否需要删除oldest元素LinkedHashMap实现首先给出最简单的写法,JDK内部实现的哈希链表/** *...原创 2019-12-14 09:17:50 · 957 阅读 · 0 评论 -
斐波那契数列
定义斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N...原创 2019-12-05 07:53:46 · 205 阅读 · 0 评论 -
二分查找
非常值得注意的一点我们在取mid的时候,无论是直接left+(right-left)/2还是(left+right)>>>1做的都是整数除法,都是向下取整,这么一来,如果我们在处理left指针的时候,单纯的让left = mid,可能会出现下面这种情况left = n, right = n+1; key位于left和right之间,之后left、right、mid的变动...原创 2019-11-11 02:59:57 · 157 阅读 · 0 评论 -
算法分析基本概念
主要内容关于复杂度的一些界限的定义对于界限计算的一些推论复杂度计算模型的描述具体的算法题最大子序列和最大公约数四个定义:如果存在正常数c{c}c 和n0{n_0}n0,使得当N≥n0{N\geq n_0}N≥n0时,T(N)≤cf(N){T(N) \le cf(N)}T(N)≤cf(N),则记为T(N)=O(f(n)){T(N) = O(f(n))}T(N)=O(f...原创 2019-11-09 10:50:29 · 189 阅读 · 0 评论