数据结构与算法
文章平均质量分 89
介绍常用的数据结构与算法;源码分析Java的集合框架。
Chiclaim
于
展开
-
数据结构与算法(十四)深入理解红黑树和 JDK TreeMap 和 TreeSet 源码分析
本文从 2-3 树再到 2-3-4 树讲解红黑树的起源、《算法4》和《算法导论》里红黑树的差异以及红黑树 5 条基本性质的原理分析,最后对 JDK 中基于红黑树数据机构的 TreeMap 和 TreeSet 进行源码分析原创 2018-07-14 18:10:50 · 3309 阅读 · 5 评论 -
数据结构与算法(十三)平衡二叉树之AVL树
本文主要包括以下内容:平衡二叉树的概念AVL树插入操作保持AVL树的平衡删除操作保持AVL树的平衡平衡二叉树的概念为什么需要平衡二叉树?通过前面的 二分搜索树(Binary Search Tree)和 BinarySearchTree的时间复杂度分析 的介绍我们知道,二分搜索树的性能跟树的高度(h)有关系 :h 为二分搜索树的高度,那么高度 h 和二分搜索树节...原创 2018-06-19 23:34:21 · 1642 阅读 · 0 评论 -
数据结构与算法(十二)并查集(Union Find)及时间复杂度分析
本文主要包括以下内容:并查集的概念并查集的操作并查集的实现和优化 Quick FindQuick Union基于size的优化基于rank的优化路径压缩优化并查集的时间复杂度并查集的概念在计算机科学中,并查集 是一种树形的数据结构,用于处理不交集的合并(union)及查询(find)问题。并查集 可用于查询 网络 中两个节点的状态, 这里的网络是一个抽象的概...原创 2018-06-17 22:21:57 · 44525 阅读 · 10 评论 -
数据结构与算法(十一)Trie字典树
本文主要包括以下内容:Trie字典树的基本概念Trie字典树的基本操作 插入查找前缀查询删除基于链表的Trie字典树Set性能对比LeetCode相关线段树的问题 LeetCode第208号问题LeetCode第211号问题LeetCode第677号问题Trie字典树的基本概念上一篇我们介绍了 线段树(Segment Tree),本文主要介绍Trie字典树...原创 2018-06-16 10:02:57 · 37223 阅读 · 0 评论 -
数据结构与算法(十)线段树(Segment Tree)入门
本文主要包括以下内容:线段树的概念线段树的基本操作实现一个线段树LeetCode相关线段树的问题线段树的概念线段树(Segment Tree)也是一棵树,只不过元素的值代表一个区间。 常用区间的 统计 操作,比如一个区间的最大值(max),最小值(min),和(sum)等等如一个长度为10的数组,它对应的 求和 线段树,如下图所示(图中的数字表示索引):根节...原创 2018-06-10 17:47:31 · 14080 阅读 · 1 评论 -
数据结构与算法(九)Set集合和BinarySearchTree的时间复杂度分析
本文主要包括以下内容:Set集合的基本概念Set集合的基本操作Set集合的BST实现和LinkedList实现Set集合两种实现方式的时间复杂度分析Set集合的基本概念Set集合是对数学中集合的抽象,Set集合有两个特性:Set集合里没有重复元素Set集合是无序集合Set集合的基本操作插入删除Set是否为空Set是否包含某个元素Set元素个...原创 2018-06-08 22:36:08 · 5076 阅读 · 3 评论 -
数据结构与算法(八)二分搜索树(Binary Search Tree)
本文主要包括以下内容:二分搜索树的基本概念二分搜索树的基本操作 插入删除查询实现二分搜索树二分搜索树的不足二分搜索树的基本概念二分搜索树(Binary Search Tree)满足一下几个条件:若它的左子树不为空,左子树上所有节点的值都小于它的根节点若它的右子树不为空,右子树上所有的节点的值都大于它的根节点它的左、右子树也都是二分搜索树如果插入的元素在二...原创 2018-06-06 17:51:22 · 4588 阅读 · 0 评论 -
数据结构与算法(七)树和二叉树
本文主要包括以下内容: 1, 树的基本概念2,二叉树 1, 二叉树的基本概念 2,二叉树的分类 1,完全二叉树(Complete Binary Tree) 2,完美/满二叉树(Perfect Binary Tree) 3,完满二叉树(Full Binary Tree)...原创 2018-06-04 23:30:17 · 22136 阅读 · 6 评论 -
数据结构与算法(六)二叉堆、优先队列和 Java PriorityQueue
本文主要包括以下内容:堆的基本概念堆的基本操作构建大顶堆和小顶堆优先队列的基本概念实现一个优先队列Java PriorityQueue源码分析优先队列通常是使用二叉堆来实现的 ,接下来先介绍一下二叉堆。二叉堆的基本概念二叉堆(binary heap)是一个由二叉树组织的堆数据结构。二叉堆是 J. W. J. Williams于1964提出的用于堆排序的数据结构。...原创 2018-06-02 18:34:10 · 1446 阅读 · 0 评论 -
数据结构与算法(五)深入理解递归
由于后面介绍的数据结构和算法会大量使用到递归,而且递归也是很多讲解数据结构与算法相关书籍的必不可少的章节,所以单独介绍一下递归。本文主要包括一下几个部分: 1. 递归的基本概念 1. 基线条件 2. 递归条件 3. 递归和栈 2. 微观分析递归 3. 宏观分析递归 4. 递归的优点与不足 1. 尾部递归 2. 循环递归的基本概念在计算机科学...原创 2018-06-01 13:03:54 · 3033 阅读 · 0 评论 -
数据结构与算法(四)队列和 Java ArrayDeque 源码剖析
本文主要包括以下内容:队列基本概念队列的相关操作队列的顺序存储循环队列队列的链式存储Java LinkedList中的双端队列Java ArrayDeque源码分析 ArrayDeque双端队列ArrayDeque循环队列位运算与取模(%)ArrayDeque扩容机制ArrayDeque使用方法总结如果对队列的基本概念、相关操作、顺序存储链式存储、循环队列等比较熟...原创 2018-05-25 21:02:42 · 1460 阅读 · 0 评论 -
数据结构与算法(三)栈和 Java Stack 源码分析
前面两篇文章介绍了线性表的两种实现方式:顺序(数组)存储和链式存储。本文介绍的栈是由线性表发展而来,可以把栈当做被限制的线性表,因为栈的定义是只能在固定的一端(栈顶)进行插入和删除操作。栈的基本概念是一个只能在某一端进行插入、删除操作的线性表。通常在线性表的尾端,或称栈顶。由此我们知道栈是一个后进先出(LIFO,Last In First Out)的线性表从栈顶插入一个元素...原创 2018-05-19 12:18:49 · 1131 阅读 · 0 评论 -
数据结构与算法(二)线性表之链式存储和 LinkedList 实现
上一篇文章 线性表之顺序存储和ArrayList、Vector实现介绍了线性表的顺序存储和ArrayList的实现细节,这一篇主要介绍线性表链式存储。我们知道线性表的顺序存储需要一块连续的内存空间(数组)来存储元素。链式存储是采用一组地址任意的存储单元来存放元素,也就是说存放地址的空间不用是连续的。这样可以充分利用计算机的内存空间,实现灵活的内存动态管理。从上一篇文章我们知道线性表元素之间...原创 2018-05-17 15:27:29 · 1350 阅读 · 1 评论 -
数据结构与算法(一)线性表之顺序存储和 ArrayList、Vector 源码剖析
可能作为上层开发的开发者,直接编写数据结构与算法的情况很少,但是我们开发过程中数据结构与算法无处不在,比如我们使用的集合框架,排序,查找等。当然编程语言为我们提供了api供我们使用。但是我们依然需要明白其内部原理,才能更好的使用它们。本系列介绍的数据结构包括数组、链表、栈、队列、哈希表,二叉树、二分搜索树、平衡二叉树、AVL、红黑树、哈夫曼树、Trie、堆、线段树、KD树,并查集等。在介绍...原创 2018-05-01 18:25:26 · 2327 阅读 · 0 评论