数据结构与算法分析
文章平均质量分 71
MrMoving
running on the way
展开
-
两数互换的三种方法
public class Math6 { public static void main(String[] args) { Math6 math6 = new Math6(); } void m1(int a, int b) { int temp = a; a = b; b = temp; System.err.println(a); System.err.println(b); .原创 2021-12-22 10:58:47 · 168 阅读 · 0 评论 -
队列总结(八)LinkedTransferQueue
LinkedTransferQueue无界阻塞队列LinkedTransferQueue,此队列也是基于链表实现,对于所有给定的元素都是先入先出的。LinkedTransferQueue可以算是 LinkedBolckingQueue 和 SynchronousQueue 的合体。SynchronousQueue 内部无法存储元素,当要添加元素的时候,需要阻塞。LinkedBolckingQueue 则内部使用了大量的锁,性能有所下降。public class LinkedTransferQueue&l原创 2021-11-04 10:49:50 · 835 阅读 · 0 评论 -
队列总结(六)DelayQueue
延时队列DelayQueue延迟元素的无界阻塞队列,其中元素只能在其延迟到期后才能获取。public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E> {...}public interface Delayed extends Comparable<Delayed> { long getDelay(TimeUn原创 2021-10-21 16:08:29 · 181 阅读 · 0 评论 -
队列总结(五)LinkedBlockingQueue
LinkedBlockingQueue阻塞队列BlockingQueue接口的常用实现之一,基于链表的可选(可手动指定队列长度)有界阻塞队列public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable {构造方法,通过设置属性capacity来限制队列长度,默认容量为Integer.MAX_原创 2021-10-19 20:53:29 · 643 阅读 · 0 评论 -
队列总结(四)ArrayBlockingQueue
1111原创 2021-10-18 17:51:32 · 168 阅读 · 0 评论 -
队列总结(三)ArrayDeque
ArrayDeque关于Deque接口的介绍,记录在了另一文章里https://blog.csdn.net/java_lifeng/article/details/120650857ArrayDeque 是 Deque 接口的一种具体实现,是依赖于可变数组来实现的。ArrayDeque 没有容量限制,可根据需求自动进行扩容。ArrayDeque不支持值为 null 的元素。ArrayDeque 不是线程安全的; 在没有外部同步的情况下,它们不支持多线程并发访问。 此类用作Stack时可能比Stack原创 2021-10-13 15:25:12 · 233 阅读 · 0 评论 -
队列总结(二)PriorityQueue
队列的实现首先尝试动手写一个类实现Queue接口,发现要实现的方法太多了,麻烦。所幸,JDK为我们提供了一个骨架实现类AbstractQueue,最大限度地减少了实现Queue接口所需的工作。AbstractQueue/** * 该骨架对于允许null元素的实现来讲是不合适的,其方法add 、 remove和element分别基于offer 、 poll和peek来实现。 * 所以继承该类的队列实现必须提供一个不允许插入null元素的offer方法 */public abstract cla原创 2021-10-12 17:10:47 · 182 阅读 · 0 评论 -
队列总结(一)
QueueQueue接口定义了一个队列必须满足的基本特性,队列作为一个容器,自身继承了Collection接口,同时满足容器的特征。public interface Queue<E> extends Collection<E> {}Queue实现通常不允许插入null元素,尽管某些实现(例如LinkedList )不禁止插入null 。即使在允许null的实现中,也不应将null插入到Queue ,因为null也被poll方法用作特殊的返回值,以指示队列不包含任何元素。队原创 2021-10-09 10:58:47 · 188 阅读 · 0 评论 -
平衡二叉树AVL及其旋转
平衡二叉树的定义:1. 平衡二叉树是一棵二叉查找树,满足所有二叉查找树的性质2. 平衡二叉树要求任意一个节点的左右子树的高度差不能超过1对于高度差,有一个专有名词平衡因子。平衡因子:左子树的高度减去右子树的高度,及B = B左 - B右。由平衡二叉树的定义可知,平衡因子的取值只可能为0,1,-1。0:左右子树等高。1:左子树比较高。-1:右子树比较高。高度:树中层级的数量。比如只有 Level 0,Level 1,Level 2 则高度为 3。一般的我们取叶子节点的高度值为1,任意一个节原创 2021-07-29 14:48:55 · 319 阅读 · 0 评论 -
二叉树与二叉查找树(附java代码实现)
查阅了不少资料,拾人牙慧,做个便于自己查阅的简单归纳。树这种结构具备天然的高效性可以巧妙的避开我们不关心的东西,只需要根据我们的线索快速去定位我们的目标。所以说树代表着一种高效。在了解二分搜索树之前,我们不得不了解一下二叉树,因为二叉树是实现二分搜索树的基础。就像我们后面会详细讲解和实现AVL(平衡二叉树),红黑树等树结构,你不得不在此之前学习二分搜索树一样,他们都是互为基础的。二叉树(Binary Tree)1. 二叉树是一种特殊的树类型,最上方的唯一节点称为根节点。2. 每个节点最多只能原创 2021-07-27 14:27:24 · 362 阅读 · 0 评论 -
栈和队列
栈栈(stack)是限制对元素的插入(push)和删除(pop)只能在一个位置上进行的表,该位置是表的末端,叫做栈的栈顶(top)。栈的基本操作只有两种,压入栈(push)和弹出栈顶(pop),且只能作用于栈顶。(只有栈顶元素是可访问的)你可以把栈结构理解成一个底部封闭,顶部打开的桶。最先进去的元素一定是最后才能取出,最晚进去的元素一定是最先取出。因此栈又叫做LIFO(后进先出,Last In First Out)表。栈的优势栈的操作是常数时间的,而且是以非常快的常数时间。在某些机器上,p转载 2020-12-24 15:56:28 · 144 阅读 · 0 评论 -
最小堆与最大堆测试代码
最大堆package lock;import java.util.Arrays;/** * @author LiFeng * @create 2019-10-16 上午 11:56 * @describe */public class MaxHeap { public static void main(String[] args) { int[] a = new in...原创 2019-10-18 11:46:18 · 275 阅读 · 0 评论 -
白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节...转载 2019-10-17 23:01:31 · 269 阅读 · 0 评论