数据结构和算法
湫兮若风
这个作者很懒,什么都没留下…
展开
-
数据结构--手写动态数组
文章目录1. 概述2. 源码1. 概述使用泛型,保证,此数组可以存储任何数据类型。支持动态扩容和缩容。扩容和缩容,防止复杂度震荡。2. 源码public class Array<T> { private T[] data; private int size; private int capacity; private static...原创 2019-09-26 17:37:12 · 163 阅读 · 0 评论 -
数据结构----Trie(字典树)
文章目录1. 概述2. 源码1. 概述适合于字符串操作。时间复杂度为O(w):w为查询单词的长度。存储结构为,把字符串拆分为字母存储。图示:2. 源码/** * Trie(字典树): 适用于操作字符串. */public class Trie { private class Node { public boolean isWord; ...原创 2019-10-10 09:48:27 · 155 阅读 · 0 评论 -
数据结构----线段树(区间树)
文章目录1. 概述2. 源码1. 概述解决的问题:主要解决“区间”相关操作的问题。对区间的数据,需要进行更新和查询操作。对于给定的区间。更新:更新区间中一个元素或者一个区间的元素。查询:查询一个区间的最大值、最小值或者区间数字和。解决方式:数组:通过索引可以进行进行区间操作;但是,更新和查询的时间复杂度都是O(n),性能较低。线段树:更新和查询的时间复杂度都是O(l...原创 2019-10-09 15:41:52 · 220 阅读 · 0 评论 -
数据结构----优先队列&二叉堆&最大堆
文章目录1. 普通队列和优先队列区别2. 二叉堆1. 普通队列和优先队列区别普通队列:先入先出,后进后出;优先队列:出队顺序和入队顺序无法;主要取决于“优先级”。2. 二叉堆二叉堆性质底层是一棵二叉完全树(多余的数据,都要放在左子树这边,保证右子树为空。)堆中某个节点的值,总是不大于其父节点的值,这样根节点就是值最大的节点;因此,也称为最大堆;最小堆则是:父节点的值总是小于...原创 2019-10-08 16:15:53 · 173 阅读 · 0 评论 -
数据结构----链表实现字典结构
文章目录1. 概述2. 源码1. 概述通过内部封装的链表,来实现字典结构。2. 源码/** * 通过链表实现字典. */public class LinkedListMap<K, V> implements Map<K, V> { private class Node { public K key; public V...原创 2019-10-08 10:59:12 · 721 阅读 · 0 评论 -
数据结构----二叉树之二叉搜索树
文章目录1. 概述2. 源码1. 概述二叉树规则只能存在一个根节点。每个节点最多只能存在两个子节点。每个节点最多只能存在一个父亲节点。二叉搜索树规则拥有二叉树的规则。大于其左子树所有节点的值。小于其右子树所有节点的值。存储的元素必须具有“可比较性”。2. 源码...原创 2019-10-07 20:11:00 · 346 阅读 · 0 评论 -
数据结构---双向链表
1. 概述双向链表:每个节点存在前项指针和后项指针,方便对于节点的操作。不需要,考虑如何获取前项节点而苦恼。2. 源码/** * 双向链表: 存在前项指针和后项指针 * @param <T> */public class TwoWayList<T> { public class Node { public T data; ...原创 2019-09-29 16:00:51 · 114 阅读 · 0 评论 -
数据结构---LeetCode链表使用(删除指定值的节点)
文章目录1. 题目2. 解法一: 先得到第一个不是需要删除的节点.3. 解法二:使用虚拟头节点, 不需要特殊处理头节点1. 题目题目:删除链表中等于给定值 val 的所有节点。(LeetCode 203)案例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->52. 解法一: ...原创 2019-09-29 11:09:19 · 471 阅读 · 0 评论 -
数据结构---链表
文章目录1. 概述2. 链表源码1. 概述链表是动态的数据结构;数组、栈、队列底层都依赖于数组,都需要固定分配存储空间;而链表则动态增加新的节点空间。2. 链表源码public class LinkedList<T> { private class Node { public T data; public Node next;...原创 2019-09-29 08:54:08 · 111 阅读 · 0 评论 -
数据结构--数组队列&循环队列
文章目录1. 概述2. 数组队列源码3. 循环队列分析及源码1. 概述队列:是“先进先出”的数据结构,从队尾入队,从队头出队。队列中使用的Array,参考“数据结构–手写动态数组”。2. 数组队列源码public interface Queue<T> { int getSize(); boolean isEmpty(); void enque...原创 2019-09-27 17:41:27 · 243 阅读 · 0 评论 -
数据结构---手写栈
文章目录1. 概述2. 源码3. LeetCode问题1. 概述基础功能和jdk提供的一致。使用到的Array数组,在上一篇“数据结构–手写动态数组”中已定义。2. 源码public interface Stack<E> { void push(E element); E pop(); E peek(); int getSize()...原创 2019-09-27 14:15:01 · 219 阅读 · 0 评论 -
数据结构----并查集
文章目录1. 概述2. 通过(子树大小)优化并查集.3. 通过(排名)以及(路径压缩)优化并查集1. 概述解决哪类问题:主要解决网络中节点间的连接状态。2. 通过(子树大小)优化并查集./** * 并查集(V2): 根据集合子元素个数进行优化. */public class UnionFind2 implements UnionFind { // 标识元素的parent....原创 2019-10-10 15:44:08 · 93 阅读 · 0 评论