数据结构与算法
RalfNick
做最好的自己!
展开
-
数据结构与算法学习-数组
1. 概念学习数据结构一般都是从数组开始,以为相对来说简单,而且也最常用。数组是我们在编程中最常用的数据结构,它是线性的数据结构,即在内存中是连续的,所以可以很方便的进行遍历,只要有首地址,就可以根据角标计算出所要拿到的元素的地址:arr[i] = arr[0] + K * i;K是一个元素所占的字节数,例如在java中,一个 int 元素占有 4 个字节;实际上,学到 c 语言的知道...原创 2018-11-29 11:27:20 · 162 阅读 · 0 评论 -
数据结构与算法学习-二分查找及其变形
二分查找1、二分查找针对的是一个有序集合,查找思想主要采用分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素。要查找的元素比中间的元素小,则将范围缩小为集合的前半部分,如果待查找的元素比中间的元素大,则将将范围缩小为集合的后半部分,然后重复这个过程,直到找到元素的下标为止。2、二分查找的时间复杂度:O(logn)3、二分查找的局限性:(1)二分查...原创 2019-03-22 18:59:43 · 151 阅读 · 0 评论 -
数据结构与算法学习-排序算法(二)
很早之前整理过一篇**排序算法**,这次又整理了一下,增加了计数排序、归并排序和桶排序,需要的拿走不谢!各种排序算法实现public class Sort { /** * 交换数组中两个位置的数值 * * @param arr * @param i * @param j */ public static void ...原创 2019-03-22 18:39:04 · 136 阅读 · 0 评论 -
数据结构与算法学习-二叉查找树
之前整理了两篇关于二叉树的文章:征战二叉树-第一站征战二叉树-第二站这两篇都是基于二叉树,以及一些练习题,本篇主要对二叉查找树做一个实现,即增删改查,实际上二叉查找树也很容易理解,满足的条件就是左子节点的值小于根节点,右子节点的值大于根节点。代码实现public class BinarySearchTree<T extends Comparable<? super T>...原创 2019-03-21 11:20:56 · 132 阅读 · 0 评论 -
LRU简单实现-了解一下?
LRU 算法LRU 是一种作为缓存的算法,像 CPU 缓存,数据库缓存,浏览器缓存。以及在移动端开发时的图片安缓存,采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法,常见的策略有三种:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Rec...原创 2019-01-22 23:21:13 · 760 阅读 · 0 评论 -
数据结构与算法学习-双向链表
双向链表在上一篇单链表中已经提到了双向链表,其实单链表实现时候,双向链表相对容易多了,只不过对每个节点多了一个前驱节点链接,遍历可以前向遍历,也可以后向遍历。在添加节点和删除节点时,需要注意,因为需要维护节点和前驱链和后继链,所以在添加时,先完成新节点的前向链和后向链,然后再修改新节点的前驱节点的后向链和后继节点的前驱链,分清顺序;同样,删除节点,顺序相反,先完成前驱节点和后继节点的链接,然后...原创 2019-01-16 23:46:04 · 182 阅读 · 0 评论 -
数据结构与算法学习-单链表
一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要...原创 2019-01-01 19:54:45 · 238 阅读 · 0 评论 -
数据结构与算法学习-栈
1. 栈的特性栈这个数据结构相对简单,它是一种“先进后出”(First In Last Out,FILO)的数据结构,即操作数据的进出只能在一端进行,所以从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。栈的实现可以用数组来实现,此时属于顺序栈,同时可以...原创 2018-12-09 21:40:21 · 204 阅读 · 0 评论 -
数据结构与算法学习-队列
1.简介队列(Queue),是一种先进先出的数据结构,First In First Out(FIFO),可以想象一下,就像是在排队买票,后来的人只能排在对尾,先来的人可以先买票(在对头,可以执行出去的操作)。队列支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。所以,和栈一样,队列也是一种操作受限的线性表,但是队列比栈多出来一个操作端,可以吧队列...原创 2018-12-20 00:06:50 · 342 阅读 · 0 评论 -
数据结构与算法学习-复杂度分析
本篇主要记录一下在学习数据结构与算法的过程中,关于复杂度的一些理论部分,了解这些概念和方法后,主要就是通过大 O 法来得到复杂度,对算法有一个很好的评估!一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4....原创 2018-11-29 11:29:34 · 160 阅读 · 0 评论 -
数据结构与算法学习-数组练习
上一篇 数据结构与算法学习-数组 简单实现了一下 ArrayList,对 List 的增删改查有了一定的认识,这一部分,来练习一下一些简单小算法,可以使用我们自己实现的 ArrayList,顺便检查下哪里写的不好。下面就直接给出算法,具体的逻辑不讲解,都是相对比较基础的算法题,花一点时间相信大家能够看得懂!public class RArrayListUtil { /** ...原创 2018-11-29 11:28:38 · 325 阅读 · 0 评论 -
数据结构与算法学习-二叉堆及堆排序
1. 二叉堆定义(1)堆是一个完全二叉树(2)堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。第一点,堆必须是一个完全二叉树。,除最后一层,其他层的节点个数都是满的,最后一层的节点都靠左排列。第二点,堆中的每个节点的值必须大于等于(或者小于等于)其子树中每个节点的值。也可以理解为,堆中每个节点的值都大于等于(或者小于等于)其左右子节点的值。这里我们借助于堆这种数...原创 2019-04-10 20:32:41 · 379 阅读 · 0 评论