![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
The_last_knight
这个作者很懒,什么都没留下…
展开
-
哈希表
哈希表我们通过将我们要查找的某种数据类型转化为一个索引index,然后通过索引去数组中查找,这时它的复杂度就是O(1)级别的。而将某个数据类型转化为索引的函数我们就称为是哈希函数,比如说将26个小写字母转化为索引,我们可以这么写index = ch - 'a';这样就建立起了一一对应的关系,但是并不是所有的对应关系都是一一对应的,因为数组的容量是有限的,而输入的范围可能是无穷的,所以很有...原创 2019-12-18 14:12:05 · 208 阅读 · 0 评论 -
红黑树
红黑树2-3树2-3树的节点它可以有一个元素,也可以有两个元素,它也满足二分搜索树的性质我们把含有两个孩子的节点称为2节点,含有3个孩子的节点称为3节点2-3树是一种绝对平衡的树,所谓绝对平衡的树指的是从根节点到任意一个叶子节点,所经过的节点是都是相同的。那么2-3树是怎么做到的呢? <红黑树与2-3树的等价性由于我们一般每个节点都是表示一个数据的,2-3树有点...原创 2019-12-18 14:11:08 · 135 阅读 · 0 评论 -
AVL
AVL概念及实现我们在研究二分搜索树时发现,如果我们将数据顺序添加进树中时,它有会退化成一棵链表,即所有的元素都添加到一个孩子上,这样树结构的优势就体现不出来,为了不使左右孩子的高度相差太大,我们需要对树进行调整,使树达到平衡,成为一棵平衡二叉树,AVL就是一种经典的平衡二叉树在AVL中,我们定义的平衡二叉树为,对于任意一个节点,左子树和右子树的高度相差不能超过1。我们为每一个...原创 2019-12-18 14:10:23 · 169 阅读 · 1 评论 -
并查集
并查集我们之前遇到的树结构都是由父亲指向孩子,但是并查集不一样,它是由孩子指向父亲的一种结构,并查集结构可以非常高效的回答连接问题(Connectivity Problem),它可以很快的判断网络中节点的连接状态。并查集主要支持两个动作union(p, q)将元素p, q连接起来isConnected(p, q)判断元素p, q是否是连接的,即是否所属一个集合这里先给出...原创 2019-12-18 14:09:23 · 131 阅读 · 0 评论 -
Trie
TrieTrie树又称为字典树、前缀树。如果我们使用一般树结构去查询一个数据集里的单词,它的复杂度是O(log n),但是如果我们使用Trie去查询单词的话,查询的复杂度只与单词的长度有关,与数据的规模无关。比如对于一个2202^{20}220规模的数据集,我们去查一个单词"word",一般树的复杂度为O(20),而Trie树的复杂度为O(4),其中4是单词的长度,所以Trie树是一种很高效的查...原创 2019-12-18 14:08:24 · 165 阅读 · 0 评论 -
线段树
线段树对于有一类的问题,我们主要关心的是线段(区间),比如说查询一个区间[i, j]内的最大值,最小值等等。假设你有一个网站,你想查询某年(或某年以后)的用户访问量,消费最多的用户等等,这些都是在某个区间内进行查询,一般线段树的区间是固定的,不包含删除和添加的操作,只有查询和更新的操作线段树的表示现在如果假设有n个元素,用数组存储的话,需要多少空间呢public clas...原创 2019-12-18 14:07:14 · 136 阅读 · 0 评论 -
优先队列和堆
优先队列和堆普通队列:先进先出,就像是我们在银行办业务或者是在超市买东西,但是考虑在医院,有病人有突发情况,这个时候容不得他去排队挂号了,这时他的优先级是比较高的,所以他需要得到优先的处理,像这种队列中的元素具有优先级的队列,我们把它称之为优先队列。在游戏中我们也会设置优先攻击血量最低的怪或者距离最近的怪,这时候血量和距离就成为了判断优先级的标准;在操作系统的任务调度,我们为程序分配CPU,内存...原创 2019-12-18 14:06:32 · 221 阅读 · 0 评论 -
二分搜索树
二分搜索树什么是树结构当你把上面的图倒过来看,就像是一棵树,所以我们把这种结构称为是树结构。那为什么要使用树结构,因为树结构在生活中很常见,如文件夹的组织方式又或者如公司职能的组织方式。这些都是树结构的例子。为什么会使用树结构呢? 原因就是因为高效。概念同链表一样,它也是一种动态的数据结构,链表中的节点是指向一个节点,而二叉树是指向两个节点,我们把这两个节点称为左子树和右子树,又或者...原创 2019-12-18 14:05:33 · 105 阅读 · 0 评论 -
链表
链表链表是一种非常重要的线性数据结构,我们在实现栈和队列时使用的是动态数组实现的,这个动态数组是针对用户而言是动态的,实际上底层是静态的,是通过resize()操作去解决容量问题的。而链表则是一种真正的动态数据结构,它是这么一种数据结构,我们把数据存储在一个节点(Node)中,一个节点一般包含两部分的内容,一个是存储的数据,一个是它要指向的下一个节点class Node { priva...原创 2019-12-18 14:02:52 · 262 阅读 · 0 评论 -
动态数组、栈、队列
动态数组API介绍数组是一种根据下标操作的数据结构,它的查询速度很快,但是它有缺点,那就是数组的容量一旦在创建时确定,就不能进行更改,所以为了克服这一缺点,我们实现一个自己的数组,并除此以外,还会实现一些方法,包括以下add(int index, E e)向指定index添加元素eget(int index)获得指定index的元素remove(int index)...原创 2019-12-18 14:01:58 · 164 阅读 · 0 评论 -
常见排序算法
由于近期在学习排序算法,决定将自己的学习过程记录下来,一是为了自己能够方便的复习,另一个是将这个知识分享给大家。我将使用Java语言实现下列排序算法选择排序插入排序希尔排序归并排序快速排序堆排序欢迎访问我的个人博客Coder,有更优质的阅读体验,记得收藏哦。准备工作为了对实现的算法进行测试,我们准备一个工具类Helper,里面包括我们由于测试算法正确与否的方法以及性能测试的代...原创 2019-10-02 16:37:19 · 156 阅读 · 0 评论 -
数据结构--Java语言描述
本篇文章是为了记录自己在学习数据结构时的笔记,会对常见的数据结构做基本的介绍以及使用Java语言进行实现。包括动态数组栈队列链表二分搜索树优先队列和堆线段树Trie树并查集AVL树红黑树哈希表动态数组API介绍数组是一种根据下标操作的数据结构,它的查询速度很快,但是它有缺点,那就是数组的容量一旦在创建时确定,就不能进行更改,所以为了克服这一缺点,我们实现一个自己的...原创 2019-09-29 14:12:59 · 779 阅读 · 2 评论