
数据结构与算法
文章平均质量分 92
又十七
这个作者很懒,什么都没留下…
展开
-
排序算法
目录(一) 选择排序 Selection Sort1.原理2.代码实现(一) 选择排序 Selection Sort1.原理第一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置, 然后再从剩余的未排序元素中寻找到最小(大)元素, 然后放到已排序的序列的末尾. 以此类推, 直到全部待排序的数据元素的个数为零.2.代码实现public class Selectio...原创 2020-05-14 15:41:48 · 355 阅读 · 0 评论 -
数据结构与算法之哈希表
目录(一) Hash表1.哈希(散列)函数2.哈希表3.哈希函数的设计3.哈希冲突的解决方案(二) 自定义HashTable1.HashTable基础结构2.HashTable的CRUD操作(三) 自定义HashTable时间复杂度分析1.HashTable静态空间的时间复杂度分析2.HashTable动态空间处理3.HashTable动态空间的时间复杂度分析(一) Hash表1.哈希(散列)...原创 2020-04-02 19:36:05 · 516 阅读 · 0 评论 -
数据结构与算法之红黑树
目录(一) 2-3 树(一) 2-3 树2-3树: 是最简单的B-树(或-树)结构, 其每个非叶节点都有两个或三个子节点, 而且一个节点可以包含2个元素.2-3树虽然不是二叉树, 但满足二分搜索树的基本性质.2-3树是一棵绝对平衡的树(对于任意一个节点, 左右子树的高度是相等的)...原创 2020-03-20 15:50:10 · 259 阅读 · 0 评论 -
数据结构与算法之AVL树
目录(一) 定义(二) 自定义AVL树1.AVL树基础结构2.AVL添加操作3.AVL树删除操作(一) 定义通过前面的 数据结构与算法之二分搜索树 的学习我们知道, 二分搜索树的性能跟树的高度(h)存在必然联系:1. 二分搜索树的添加操作, 删除操作, 查询操作 都需要在二分搜索树中找到合适的结点再进行逻辑操作, 找适到合结点所要经历的最多个数结点为 树的高度h.2. 二分搜索树的高度h...原创 2020-03-19 11:40:07 · 259 阅读 · 0 评论 -
数据结构与算法之并查集
目录(一) 定义(二) 自定义并查集1.并查集的接口2.Quick Find方式实现的并查集3.Quick Union方式实现的并查集4.Quick Find 与 Quick Union 性能比较5. 基于size的优化6. 基于rank的优化6. 路径压缩的优化(一) 定义并查集(Union Find): 是一种树型的数据结构, 用于处理一些不相交集合(Disjoint Sets)的合并及查...原创 2020-03-17 15:51:17 · 263 阅读 · 0 评论 -
数据结构与算法之字典树
目录(一) 定义(二) 自定义字典树1.字典树的基本结构2.字典树的添加操作3.字典树的查询操作4.字典树的删除操作(一) 定义字典树(Trie): 又称前缀树, 是一种多叉树形结构, 是一种哈希树的变种. 查询每个条目的时间复杂度和字典树中一共有多少个条目无关, 与查询的字符串的长度相关(O(w)).字典树满足已下性质:根节点不包含字符, 除根节点外每一个节点都只包含一个字符和一个单词结...原创 2020-03-16 12:13:13 · 198 阅读 · 0 评论 -
数据结构与算法之线段树
目录(一) 定义(二) 自定义线段树1.根据数组创建线段树2.线段树的区间查询操作3.线段树的单个更新操作(三) 时间复杂度分析(一) 定义线段树是一棵平衡的二叉搜索树. 何为平衡? 线段树的左右两个子树的高度差的绝对值不超过1. 线段树的每个结点存储的内容包括两部分:区间或者是线段: [区间左端点, 区间右端点] (以参数的形式表示 或者 节点类的成员属性表示)区间结点存储的元素: 根...原创 2020-03-12 15:58:15 · 257 阅读 · 0 评论 -
数据结构与算法之二叉堆
目录(一) 定义(二) 自定义基于动态数组的最大堆1.自定义最大堆的基础结构2.堆的添加元素和Sift Up(上浮操作)3.堆的取出最大元素和Sift Down(下沉操作)(一) 定义堆(Heap): 是计算机科学中一类特殊的非线性数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆总是满足下列性质:堆一定是一棵完全树(按照元素循序排列成树的形状)堆中任意一个结点的值总是不...原创 2020-03-11 10:39:40 · 284 阅读 · 0 评论 -
数据结构与算法之映射
目录(一) 定义(二) 自定义映射1.基于链表的映射实现1.基于二分搜索树的映射实现(三) 时间复杂度分析(一) 定义映射Map: 存储(键, 值)数据对的数据结构(Key, Value), 我们可以根据键(Key)来寻找值(Value), 且key在映射中是唯一的.实现映射的方式多种多样, 在JAVA语言表现中, 会将映射定义成一个接口, 提供映射对应的操作的抽象方法./** * 自定义...原创 2020-03-09 16:18:17 · 1072 阅读 · 0 评论 -
数据结构与算法之集合
目录(一) 定义(二) 自定义集合1.基于二分搜索树的集合实现2.基于链表的集合实现(三) 时间复杂度分析(一) 定义承载元素的一个容器, 容器中的元素无序且唯一(不重复). 实现集合的方式多种多样, 在JAVA语言表现中, 会将集合定义成一个接口, 提供集合对应的操作的抽象方法./** * 自定义集合抽象类Set * * @author Administrator * */p...原创 2020-03-09 16:03:44 · 211 阅读 · 0 评论 -
数据结构与算法之二分搜索树
目录(一) 定义(二) 自定义二分搜索树BinarySearchTree1. 新建自定义二分搜索树类BinarySearchTree2. 自定义二分搜索树的增加操作3. 自定义二分搜索树的查询操作4. 自定义二分搜索树的遍历操作5. 自定义二分搜索树的删除操作(一) 定义树(Tree): 是一种动态的数据结构. 它是由 n(n>=1) 个有限结点组成一个具有层次关系的集合. 也可...原创 2020-03-06 10:23:37 · 455 阅读 · 0 评论 -
数据结构与算法之单链表
目录(一) 链表1.定义2. 图解3.数组和链表的对比(二) 自定义链表LinkedList(一) 链表1.定义链表是一种物理存储结构上非连续,非顺序的线性数据存储结构,数据元素的逻辑顺序是通过链表中的节点(Node)链接次序实现的。每个链表中都包含两部分: 存储的数据 和 下一个节点(Node).class Node{ private E e; // 存储的数据 private No...原创 2020-03-03 11:21:21 · 504 阅读 · 0 评论 -
数据结构与算法之队列
目录(一) 队列1.定义(二) 队列的基本实现1.新建接口Queue2.自定义ArrayQueue数组队列3.自定义LoopQueue循环队列(一) 队列1.定义队列也是一种操作受限的线性表数据结构, 它只允许在表的前端(队首)进行删除操作,而在表的后端(队尾)进行插入操作. 队列是一种先进先出的数据结构(First In First Out: FIFO). 相比较数组, 栈对应的操作是数组...原创 2020-02-28 22:56:06 · 506 阅读 · 0 评论 -
数据结构与算法之栈
目录(一) 栈定义(二) 栈的基本实现1.新建接口Stack2.自定义ArrayStack类实现Stack接口(一) 栈定义栈是一种线性序列结构, 它的特殊之处在于, 栈对于其中的元素的访问做了限制, 只能从序列的某一端(栈顶)进行读写操作, 而禁止操作的另一端(栈底). 栈是一种后进先出的数据结构. 相比较数组, 栈对应的操作是数组的子集.栈的应用应用很广泛, 如: 撤销操作, 程序调用...原创 2020-02-27 11:04:04 · 188 阅读 · 0 评论 -
数据结构与算法之数组
(一) 数组1.定义 用来存储固定大小的同类型元素的集合, 数据类型可以是8种基本的数据类型,也可以是引用数据类型. 数组属于引用数据类型.2.两种初始化方式动态初始化: 声明并开辟指定长度的数组, 会为数组之中的每个元素附上该数据类型的默认值(引用类型: null)项目...原创 2020-02-26 17:09:20 · 581 阅读 · 0 评论