数据结构
jssd
正在学习中
展开
-
java实现二分搜索树
二叉搜索树性质:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。代码实现import java.util.ArrayList;import java.util.List;/** * @author jssd * @cre...原创 2019-05-25 13:15:25 · 557 阅读 · 0 评论 -
(十二) 并查集-java实现
并查集什么是并查集在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。并查集的表示方法初始化一个数组. 此数...原创 2019-09-03 10:31:20 · 256 阅读 · 0 评论 -
(十) 线段树
线段树也被称作区间树(Segment Tree)为什么使用线段树一类问题对于有一类问题, 我们关心的时线段(或者区间)经典的线段树问题: 区间染色有一面墙, 长度为n, 每次选择一段墙进行染色, m次操作之后, 可以看见多少种颜色数组解决复杂度假如我们使用数组解决这个问题, 那么. 每次染色(更新区间), 需要O(n)的操作.每次查询(查询区间) 需要O(n)的操作另一类问题...原创 2019-08-18 09:48:30 · 183 阅读 · 0 评论 -
(十一) 字典树
文章目录Trie 字典树前缀树一个字典的复杂度Tire的复杂度Tire图示实现代码leetCode 例题211号问题677号问题Trie 字典树前缀树一个字典的复杂度对于一个字典来说, 如果有n个条目使用树结构, 查询的时间复杂度是O(longn)如果有100万个条目(2^20)logn 大约为20Tire的复杂度查询每个条目的时间复杂度和字典中一共有多少条目无关时间复杂度为O(...原创 2019-08-22 10:30:12 · 185 阅读 · 0 评论 -
(八) 映射(Map)
文章目录映射Map基于链表的MapMap接口链表实现Map代码二分搜索树实现MAP代码两种实现方式对比LeetCode 中例题解析349号问题: 两个数组的交集350号问题映射MapMap是存储(键, 值) 数据对的数据结构根据键Key寻找值基于链表的MapMap接口package pers.jssd.map;/** * @author jssdjing@gmail.com...原创 2019-08-11 10:03:05 · 365 阅读 · 0 评论 -
(九) 堆和优先队列
文章目录优先队列什么是优先队列堆的基本结构使用数组存储堆堆的使用操作向堆中添加元素和shiftUp取出堆的最大元素和shiftDownreplace 替换操作heapify 操作堆的实现代码优先队列的实现(使用堆)leetCode例题优先队列什么是优先队列普通队列: 先进先出, 后进后出优先队列: 出队顺序和入队顺序无关, 和优先级相关堆的基本结构二叉堆是一棵二叉树二叉堆是一棵完全...原创 2019-08-14 09:58:01 · 334 阅读 · 0 评论 -
(七) 集合
文章目录集合Set接口使用二分搜索树实现集合使用链表实现集合解决一个问题集合集合是一个不能存放重复元素的容器Set接口public interface Set<E> { void add(E e); void remove(E e); boolean contain(E e); int getSize(); boolean i...原创 2019-08-09 10:09:56 · 79 阅读 · 0 评论 -
(六) 二叉搜索树
文章目录二分搜索树二叉树性质特点二分搜索树特点代码实现二分搜索树二叉树性质若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。特点和链表一样, 是动态数据结构二叉树具有唯一根节点二叉树的每个节点最多有两个孩子二叉树的每个节点最...原创 2019-08-06 08:53:53 · 99 阅读 · 0 评论 -
(四) 数据结构之链表
文章目录链表为什么链表很重要特性数组和链表的对比数组链表链表的实现代码实现复杂度分析使用链表实现栈代码实现与数组栈进行比较使用链表实现队列代码实现测试代码与循环队列, 数组队列进行比较链表链表是一种真正意义上的动态线性结构, 因为他的底层是动态的. 而动态数组底层是静态ede, 依靠resize解决固定容量问题为什么链表很重要最简单的动态数据结构更深入的理解引用更深入的理解递归...原创 2019-07-28 10:07:42 · 370 阅读 · 0 评论 -
(二) 数据结构之栈
栈栈是一种线性结构相比数组, 栈对应的操作是数组的子集只能从一端添加元素, 也只能从一端取出元素这一端称为栈顶栈是一种后进先出的数据结构Last In First Out(LIFO)栈接口package pers.jssd.stack;/** * 栈的接口 * * @author jssd * Create 2019-07-23 8:25 */public int...原创 2019-07-23 09:10:16 · 91 阅读 · 0 评论 -
(一) 数据结构之数组
数组存放将数据排列成一排存放注意数组的下标, 在计算机领域中是从0开始的数组最大的优点快速索引基础使用代码package com.company;public class Main { public static void main(String[] args) { // 创建数组 int[] scores = new int[10];...原创 2019-07-23 09:09:07 · 77 阅读 · 0 评论 -
(五) 链表和递归
文章目录链表与递归从一个问题开始不使用虚拟头节点使用虚拟头节点递归使用递归数组求和链表具有天然的递归性链表与递归从一个问题开始我们从LeetCode上的一个问题开始对链表和递归进行研究分析学习在LeetCode上的第203号问题, 是一个链表删除元素的问题, 具体题目如下Remove all elements from a linked list of integers that ...原创 2019-07-31 09:30:41 · 387 阅读 · 0 评论 -
(三) 数据结构之队列
文章目录队列队列的特点队列接口的实现队列的实现数组队列实现代码测试代码复杂度分析循环队列实现代码复杂度分析两种队列比较队列队列的特点队列也是一种线性结构相比数组, 队列对应的操作是数组的子集只能从一端(队尾)添加元素, 只能从另一端(队首)取出元素队列是一种先进先出的数据结构(先到先得)First In First Out (FIFO)队列接口的实现Queuevoid e...原创 2019-07-24 10:05:44 · 315 阅读 · 0 评论 -
(十三) AVL平衡二叉树
文章目录AVL 平衡二叉树树的深度平衡因子如何将二叉搜索树改进成AVL什么时候改进怎么维护右旋转左旋转树的不平衡情况LLRRLRRL代码实现AVL 平衡二叉树树的深度对于每个节点来说, 其存在的层数就是以此节点来表示的二叉树的深度.二叉树的深度定义如下:只有一个节点的树, 他的深度为1一个节点的深度等于它的左孩子深度;和右孩子深度的最大值加1平衡因子每一个平衡树都会维护一个平衡...原创 2019-09-04 09:34:02 · 410 阅读 · 0 评论