数据结构与算法
文章平均质量分 86
程序蛇
这个作者很懒,什么都没留下…
展开
-
Queue、PriorityQueue源码分析
源码分析一、Queue接口public interface Queue<E> extends Collection<E> { //队列头添加元素,若队列已满则抛出异常 boolean add(E e); //队列头添加元素,若队列满时不会抛出异常而是做一些相应的处理 boolean offer(E e); //队列头删除...原创 2019-10-19 13:48:57 · 119 阅读 · 0 评论 -
Stack源码分析
如下图所示,为Stack的一些特性源码分析一、构造器 //Stack的构造器默认调用了Vector的默认构造器 初始化一个长度为10的数组 public Stack() { //super(); } //指定初始化容量、增长因子 //若不指定增长因子 则默认扩容为原来的2倍 //这也是Vector和Array...原创 2019-10-19 11:05:56 · 99 阅读 · 0 评论 -
LRU缓存
一、什么是LRU算法LRU,Least Recently Used算法,即一种缓存淘汰策略。计算机的缓存容量有限,若缓存满了则需要删除一些内容,给新的缓存腾出空间,但问题是要删除哪些内容呢?当然是把用的少的缓存删掉,把最有用的数据继续保留以便于继续使用。那么如何判定哪些数据是有用的呢?缓存淘汰的策略有很多,而LRU则是一种较为简单常用的算法,LRU判定最近使用过的数据为有用的,很久都没...原创 2019-10-16 17:40:33 · 2948 阅读 · 0 评论 -
数据结构:堆
堆是采用数组实现的二叉树,会根据堆属性进行排序,堆属性决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最大值或最小值 装逼堆属性堆分为两种:最大堆和最小堆,其差别在于节点的排序方式最大堆:父节点大于任何一个子节点最小堆:父节点小于任何一个子节点这就是所谓的堆属性,且对于堆中任何一个节点都成立。如图中的最大堆:父节点10大于7...原创 2019-09-20 11:57:36 · 111 阅读 · 0 评论 -
Java八大排序算法
目录交换排序:冒泡排序 快速排序插入排序:直接插入排序 希尔排序选择排序:简单选择排序 堆排序其他排序:归并排序 ...原创 2019-09-21 14:25:20 · 195 阅读 · 0 评论 -
数据结构:二叉查找树
定义二叉查找树是以二叉树组织的,可以采用一个链表数据结构表示,其每一个节点为一个对象,包含left指针指向左孩子,right指针指向右孩子,parent指针指向父节点。在二叉搜索树中:若任意节点的左子树不为空,则左子树上所有节点的值均小于根节点。 若任意节点的右子树不为空,则右子树上所有节点的值均大于根节点。 任意节点的左,右子树也分别为二查搜索树。 没有键值相等的节点代...原创 2019-09-22 17:55:57 · 615 阅读 · 0 评论 -
数据结构:平衡二叉树
在学习平衡二叉树之前,我们需要先对二叉查找树进行一定的了解,其特征是:查找的性能取决于树的形状。因此在某些极端情况下,二叉查找树会退化为一个线性链表,查找效率的时间复杂度从O(log2n)降到了O(n)。为了规避这个缺点,引入了平衡二叉树。可以理解为平衡二叉树是基于二叉查找树的优化。平衡二叉树在二叉查找树的基础之上增加了一个新的特性:每一个节点的左子树与右子树高度相差最多为1,这个高度的...原创 2019-09-24 15:12:32 · 1832 阅读 · 0 评论 -
数据结构:B树&B+树
在学习B树之前,建议先了解二叉查找树,平衡二叉树,红黑树。它们的查找算法的时间复杂度为O(log2n),为了避免二叉查找树退化为线性链表,引入了平衡二叉树和红黑树的数据结构。确实二叉查找树在内存中的查找效率非常高,但是在大型的数据库存储中,实现索引查找如果采用二叉查找树查找的话,由于查找树中每个节点的存储数据是有限的,且因为查找树的结构特征,很可能导致遍历树的深度过大从而造成磁盘的IO操作过于...原创 2019-09-25 13:57:22 · 462 阅读 · 0 评论