
数据结构
珍惜时间简单生活
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重建二叉树
利用前序和中序遍历序列 或者 后序和中序遍历序列来重构二叉树,并且输出头节点。原创 2018-06-29 22:22:26 · 474 阅读 · 0 评论 -
快速排序的核心思想和Java实现
算法步骤1、从数列中挑出一个元素,称为 “基准”(pivot);2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;在每次的迭代(iteration)中,它...原创 2019-03-30 16:54:08 · 882 阅读 · 0 评论 -
红黑树的结构和优势
首先看一下红黑树的结构:红黑树的结构特点:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。为什么要要用红黑树?1、首先红黑树是不符合AVL树的平衡条...原创 2019-03-30 16:24:49 · 4370 阅读 · 0 评论 -
二叉树的遍历(递归与非递归版本)
最近在写关于二叉树方面的题目的时候,总是会用到二叉树的各种遍历,所以在这里将自己写的各种遍历,都记录下来.递归部分:首先二叉树的递归代码是比较简单的,而且前序,中序和后序遍历代码几乎一样, 只是打印节点值的输出语句的位置不一样.可以递归部分,对于二叉树中节点的遍历顺序是一样的, 都是先遍历当前节点,然后遍历当前节点的左子树,然后是右子树, 然后在遍历节点的过程, 选择输出的节点值的时机.非...原创 2018-11-24 15:39:04 · 242 阅读 · 0 评论 -
ArrayList的扩容方式和扩容时机
ArrayList的底层是一个动态数组,ArrayList首先会对传进来的初始化参数initalCapacity进行判断,如果参数等于0,则将数组初始化为一个空数组,如果不等于0,将数组初始化为一个容量为10的数组。初始容量也可以自定义指定。随着不断添加元素,数组大小增加,当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量的1.5倍。 ...原创 2018-08-09 16:41:07 · 4050 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList都实现了List接口 (1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (2)ArrayList适合查询,时间复杂度为O(1);不适合删除数据多的情况,因为需要移动数组中的数据。 (3)LinkedList适合增删,时间复杂度为O(1);不适合查询多的情况,最坏的时间复杂度会O(n)。 (4)L...原创 2018-08-09 16:39:30 · 253 阅读 · 0 评论 -
HashMap的底层实现
(1)HashMap的构成 HashMap是由数组+链表实现的。它的主干是一个Entry数组,Entry是HashMap的基本组成单元,每一个Entry包含一个 key-value的键值对。链表是为了解决哈希冲突而存在的。(2)如果存储? 如果将键值对存储到Map中,首先会调用hashCode()方法获取hashCode,并对数组长度取余找到数组上的存储位置,然后判断该位置是否由元素,...原创 2018-08-09 16:35:33 · 265 阅读 · 2 评论 -
Java集合:Queue队列解析
最近在在做一些面试题目的时候,发现自己对数据结构的了解不足,只能大概知道如何去用,这对于以后灵活应用他们是不够的。1.概述 Queue,即队列是继承了Collection和Iterable接口的一种队列结构集合。在我们记忆中Queue的最大特点就是它的FIFO方法排列元素,但并不都是这样的,PriorityQueue,优先队列就是一个例外,它是根据元素的值来进行排序的。2.主要的操作方法...原创 2018-07-20 17:11:13 · 831 阅读 · 0 评论 -
提取字符串中的数字
有时候在做一些基础的数据结构的题中,经常可能会有接收一些字符串,字符串中含有数字,然后要求对其中的数字进行运算。这就需要提取其中的数字,再进行运算。 我以前经常是这样进行转换的:public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){...原创 2018-06-25 20:55:47 · 2184 阅读 · 1 评论 -
前缀树结构和Java代码实现
以前在项目中使用过前缀对敏感词进行过滤,现在就详细说一下他的结构和如何实现吧。结构的3个基本性质:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3. 每个节点的所有子节点包含的字符都不相同。前缀的好处:前缀树可以最大限度地减少无谓的字符串比较,查询效率非常高。前缀树的核心思想是利用空间换时间,利...原创 2019-03-30 17:00:42 · 704 阅读 · 0 评论