数据结构
文章平均质量分 92
学习数据结构的笔记
吞吞吐吐大魔王
这个作者很懒,什么都没留下…
展开
-
【Java 集合框架】帮你搞通哈希表,掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题)
文章目录1. 搜索1.1 场景引入1.2 模型2. Map2.1 关于 Map 的介绍2.2 关于 Map.Entry1. 搜索1.1 场景引入在学习编程时,我们常见的搜索方式有:直接遍历:时间复杂度为 O(N),元素如果比较多效率会非常慢二分查找:时间复杂度为 O(logN),搜索前必须要求序列有序但是上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作。而现实中的查找如:根据姓名查询考试成绩通讯录(根据姓名查询联系方式)可能在查找时需要进行一些插入和删除操作原创 2021-12-15 10:15:00 · 1768 阅读 · 39 评论 -
【数据结构 Java版】了解二叉搜索树
文章目录1. 概念2. 操作2.1 查找2.2 插入2.3 删除3. 性能分析及优化1. 概念二叉搜索树(又称二叉排序树),它可以是一棵空树,也可以是一棵具有以下性质的二叉树:若它的左子树不为空,则左子树上所有的节点的值都小于根节点的值若它的右子树不为空,则右子树上所有的节点的值都大于根节点的值它的左子树和右子树也都为二叉搜索树通过性质,我们也容易得出一个结论:可以通过中序遍历来判断这棵二叉树是否为搜索二叉树,如果结果有序,则是搜索二叉树示例图:2. 操作在进行下面搜索二叉树原创 2021-11-17 08:56:09 · 647 阅读 · 25 评论 -
【Java 集合框架】PriorityQueue 优先级队列的使用
文章目录1. 场景引入2. PriorityQueue 介绍3. 知识点4. 常用方法5. 优先级队列插入元素的细节问题6. PriorityQueue 大根堆的创建方式6.1 思路6.2 代码实现6.3 使用匿名内部类1. 场景引入我们知道,Queue是一个先进先出(FIFO)的队列。在很多应用中,我们通常需要按照优先情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象。最简单的一个例子就是,在手机上玩游戏时,如果有来电,那么系统应该优先处理进来的电话。这个时候,我们发现,要原创 2021-11-08 16:22:25 · 1778 阅读 · 21 评论 -
【数据结构 Java 版】堆和优先级队列(超详解)
文章目录1. 二叉树的顺序存储1.1 存储方式1.2 下标关系1.3 顺序存储和堆的关系2. 堆2.1 概念2.2 堆的创建(以大根堆为例)2.3 创建堆的时间复杂度(易错)3. 堆的应用(1)优先级队列3.1 概念3.2 内部原理3.3 入队列操作3.4 出队列操作3.5 返回队首元素操作4. 堆的应用(2)TopK 问题4.1 介绍4.2 方法4.3 思路4.4 实现代码4.5 拓展(找第 k 大/小的元素)5. 堆的应用(3)堆排序5.1 思路5.2 实现代码6. 练习题——查找和最小的 k 对数字原创 2021-11-06 17:03:36 · 4336 阅读 · 47 评论 -
【数据结构 Java 版】二叉树的实现(超多图、超详解)
文章目录1. 树型结构1.1 概念1.2 要掌握的知识点1.3 树的存储形式1.4 树的应用2. 二叉树2.1 概念2.2 二叉树的基本形态2.3 两种特殊的二叉树2.3.1 满二叉树2.3.2 完全二叉树2.4 二叉树的性质2.5 二叉树的存储2.6 二叉树的基本操作2.6.1 二叉树的前、中、后序遍历(递归实现)2.6.2 二叉树的层序遍历2.6.2 二叉树的实现2.7 前中后序的非递归实现3. 二叉树练习题3.1 二叉树基础练习题3.1.1 二叉树的前序遍历3.1.2 二叉树的中序遍历3.1.3 二叉原创 2021-11-01 17:25:18 · 15503 阅读 · 62 评论 -
【数据结构 Java 版】详解栈和队列的实现
文章目录1. 栈1.1 概念1.2 助解图题1.3 栈的数组实现1.4 问题1.5 栈的单链表实现2. 队列2.1 概念2.2 问题2.3 队列的单链表实现2.4 数组实现队列2.5 循环队列2.6 双端队列3. 栈和队列练习题3.1 有效的括号3.2 用队列实现栈3.3 用栈实现队列3.4 实现一个最小栈3.5 设计循环队列1. 栈1.1 概念栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。特点:栈中的数据元素遵循先进后出的原则,但要注意进的同时也可以出,元素不是要全部进展原创 2021-10-24 11:20:57 · 6516 阅读 · 117 评论 -
【Java 集合框架】Stack、Queue 和 Deque 的使用
文章目录1. Stack1.1 介绍1.2 常见方法2. Queue2.1 介绍2.2 常见方法3. Deque3.1 介绍3.2 常见方法1. Stack1.1 介绍Stack 栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈。它的底层是一个数组。堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由 Vector 定义的所有方法,也定义了自己的一些方法。1.2 常见方法方法描述E push(E item)压栈E pop()出栈E peek原创 2021-10-22 04:12:46 · 1284 阅读 · 40 评论 -
【Java 集合框架】List、ArrayList 和 LinkedList 的使用
文章目录1. List1.1 List 的常见方法1.2 代码示例2. ArrayList2.1 介绍2.2 ArrayList 的构造方法2.3 ArrayList 底层数组的大小3. LinkedList3.1 介绍3.2 LinkedList 的构造方法4. 练习题5. 扑克牌小游戏1. List1.1 List 的常见方法方法描述boolean add(E e)尾插 evoid add(int index, E element)将 e 插入到 index 位置原创 2021-10-19 11:16:21 · 2316 阅读 · 52 评论 -
【Java 基础语法】Java 的泛型和包装类
前言: 本章主要是为了后面学习集合框架所做的知识补充。补充了泛型以及包装类两个知识,但是该章泛型的讲解不够全面,主要是为了集合框架学习做铺垫。文章目录1. 预备知识-泛型(Generic)1.1 泛型的引入1.2 泛型的分类1.3 泛型类的定义1.4 泛型编译的机制2. 预备知识-包装类(Wrapper Class)2.1 基本数据类型和包装类的对应关系2.2 包装类介绍2.3 装箱(boxing)和拆箱(unboxing)2.4 自动装箱(autoboxing)和自动拆箱(autounboxing)2.原创 2021-10-18 00:40:01 · 1275 阅读 · 42 评论 -
【Java 集合框架】最全的 Java 集合框架入门手册
前言: 本文主要介绍了 Java 集合框架,让大家对它有个概念的认识。为后面介绍数据结构以及集合框架中具体的实现类来做铺垫。希望大家喜欢!文章目录1. 介绍(含集合框架图)2. 各个接口概述3. 各个实现类概述4. Iterable4.1 介绍4.2 Iterator 和 ListIterator 迭代器4.3 迭代器的简单用法5. Collection5.1 介绍5.2 Collection 接口说明5.3 Collection 常用方法说明5.4 Collection 示例5.4.1 使用 Colle原创 2021-10-14 01:29:42 · 1842 阅读 · 77 评论 -
【数据结构 Java 版】玩转链表(3)双链表
文章目录一、引子二、双链表1. 概念2. 结构3. 基操的实现三、总结一、引子前面已经了解了顺序表和单链表,而在面试当中这些也是经常被提起的在继续接下来的学习前,我们要搞清以下几个问题:数组和链表的区别顺序表和链表的区别ArrayList 和 LinkedList 的区别大家发现没上述问题本质上都是同一个问题:顺序表和链表的区别那么怎么回答呢?我们可以从共性开始介绍怎么组织数据的?对于顺序表: 底层是一个数组对于链表: 每个数据是由节点组织的(由节点与节点之间的指向组织原创 2021-09-07 15:50:52 · 1129 阅读 · 61 评论 -
【数据结构 Java 版】玩转链表(2)链表面试题及个人题解
文章目录1. 删除链表中等于给定值 val 的所有节点2. 反转一个单链表3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点4. 输入一个链表,输出该链表中倒数第k个结点5. 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前7. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链原创 2021-09-05 02:54:32 · 1573 阅读 · 76 评论 -
【数据结构 Java 版】玩转链表(1)单链表+链表面试题
文章目录一、链表1. 概念2. 结构二、单向不带头非循环链表1. 概念及结构2. 链表的实现三、链表面试题四、总结一、链表1. 概念链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的上章介绍到顺序表适合用作查询和修改,而不适合用作插入和删除。并且它增容时容易造成空间浪费。而链表则具有以下的特点适合用作插入和删除随用随取,避免了空间的浪费不适合用作查询和修改2. 结构链表其实可以想象成一条被打了一些结的绳子而实际上,链表就是由一个个节点构原创 2021-08-31 15:41:50 · 2676 阅读 · 36 评论 -
【数据结构 Java 版】玩转顺序表
文章目录一、线性表二、顺序表1. 概念及结构2. 接口实现3. 增、删、改、查的时间复杂度三、总结三、总结一、线性表线性表是 n 个具有相同特性的数据元素的有限序列。常见的线性表有:顺序表、链表、栈、队列、字符串线性表的逻辑是线性结构,也就是连续的一条线。但是物理结构并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储,例如二、顺序表1. 概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况采用数组存储那既然顺序表用数组存储为什么不直接使原创 2021-08-30 09:02:36 · 1275 阅读 · 36 评论 -
【数据结构 Java 版】时间和空间复杂度
文章目录一、算法效率二、时间复杂度1. 概念2. 大 O 的渐进表示法3. 练习三、空间复杂度1. 概念2. 练习四、总结一、算法效率算法效率分析分为两种:时间效率和空间效率时间效率时间效率被称为时间复杂度,主要时衡量一个算法的运行速度空间效率空间效率被称为空间复杂度,主要衡量一个算法所需要的额外空间二、时间复杂度1. 概念一个算法所花费的时间与其中语句的执行次数成正比,故将算法中的基本操作的执行次数,作为算法的时间复杂度并且时间复杂度其实还可以分成三种情况:最坏情况:任意原创 2021-08-27 07:12:44 · 1132 阅读 · 36 评论