随笔分类 - 数据结构
第14章. 堆
摘要:一、堆的引入 现在我们想专门设计一种数据结构,用来存放整数,要求提供3个接口: 添加元素 获取最大值(或最小值) 删除最大值(或最小值) 有一种最优的数据结构就是堆。 时间复杂度:获取最大值的:O(1)、删除最大值O(log n)、添加元素O(log n) 二、堆的相关概念 堆(Heap是一种树状的
第13章. 哈希表
摘要:哈希表(Hash Table) 一、引言 TreeMap分析 添加、删除、搜索的时间复杂度:O(n) 特点: key必须具备可比较性 元素的分布是有顺序的 但是在实际应用中,很多时候的需求中 Map中存储的元素不需要讲究顺序 Map中的Key不需要具备可比较性 不考虑顺序、不考虑Key的可比较性,M
第12章. 映射(Map)
摘要:映射(Map) Map在有些变成语言中也叫作字典(比如在Python中) Map的每一个Key是唯一的,Value可以不是唯一的 Map中的每一个Key对应一个Value 一、Map的接口设计 public interface Map<K, V> { int size; boolean isEmpt
第11章. 集合(Set)
摘要:集合(Set) 一、集合的特点 集合的特点: 不存放重复的元素 常用于去重 二、集合的实现方式 思考:集合的内部实现是否能直接利用以前学过的数据结构? 动态数组 链表 二叉搜索树(AVL树、红黑树) 三、集合的接口实现 public interface Set<E> { int size(); bo
第10章. 红黑树
摘要:红黑树(Red Black Tree) 红黑树性质 null节点只是一种记号,并不存储真实数据,也不是红黑树中的实际节点,其作用是方便程序员在设计和编程时理解节点的操作规则,在实际应用中并没有实际意义。 红黑树的等价变换 红黑树和4阶B树(2-3-4树)具有等价性 红黑树是平衡二叉搜索树,而B树是平
第9章. B树
摘要:B树(B-tree、B-树) B树是一种平衡的多路搜索树,多用于文件系统,数据库的实现。 B树的特点 1个节点可以存储超过2个元素、可以拥有超过2个子节点 拥有平衡二叉搜索树的一些性质 平衡、每个节点的所有子树高度一致 比较矮 m阶B树的性质(m>=2) m阶B树一个节点最多拥有m-1个元素,最多有
第8章. AVL树
摘要:AVL树 AVL树是在二叉搜索树上加上自平衡的功能。 AVL树是最早发明的自平衡二叉搜索树之一。 AVL取名于两位发明者的名字:G.M.Aelson-Velsky和E.M.Landis。 1.1 平衡因子 平衡因子(Balance Factor):某节点的左右子树高度差 平衡因子 = 左子树高度 -
第7章. 平衡二叉搜索树
摘要:平衡二叉搜索树(Balanced Binary Search Tree) 1.1 二叉搜索树存在的问题 添加、删除节点时,都可能导致二叉搜索树退化成链表。为了防止二叉搜索树退化成链表,让添加、删除搜索的复杂度维持在O(logn),提出平衡的概念。 1.2 平衡(Balance) 平衡:当节点数量固定
第6章. 二叉搜索树(BST)
摘要:二叉搜索树(Binary Search Tree) 使用二叉搜索树,可以使添加、删除、搜索的最坏时间复杂度优化至O(logn) 一、BST的相关概念 二叉搜索树是二叉树的一种,又被称为二叉查找树、二叉排序树,是应用非常广泛的一种二叉树,简称BST。 任意一个节点的值都大于其左子树所有节点的值 任意一
第5章. 二叉树
摘要:二叉树 一、树的基本概念 节点、根节点、父节点、子节点、兄弟节点 一棵树可以没有任何节点,称为空树 一棵树可以只有一个节点,也就是只有根节点 子树、左子树、右子树 节点的度:子树的个数 树的度:所有节点度中的最大值 叶子节点:度为0的节点 非叶子节点:度不为0的节点 层数:根节点在第1层,根节点的子
第2章. 链表(LinkedList)
摘要:链表 链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的。 单向链表 一、单向链表的设计 1.1、不带虚拟头结点 public class LinkedList<E> { // 链表的节点数量 private int size; // 链表的头结点 private Node<E> firs
第1章. 动态数组(ArrayList)
摘要:动态数组 一、动态数组接口设计 // 这里可以写一个List接口,然后ArrayList类去实现这个接口,实现接口中的方法。但为了方便起见,直接将这些方法写在类中。 // 这些方法暂时不添加泛型、和正确的返回值 public class ArrayList { // 动态数组的长度 private
第0章. 时空复杂度
摘要:时空复杂度 一、时间复杂度 时间复杂度:估算程序指令的执行次数(执行时间) 1.1 大O表示法(Big O) 一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度 它并不是用于来真实代表算法的执行时间,它是用来表示代码执行时间的增长变化趋势的 忽略常数、系数、低阶 9 —— O(1) 2