Java数据结构
ouyangjun__
这个作者很懒,什么都没留下…
展开
-
LRU缓存淘汰算法
一)LRU简介LRU是Least Recently Used的缩写,即最近最少使用。是一种常用的页面置换算法,其所有操作都是在内存中进行。设计原理:当数据在最近一段时间经常被访问,那么将来也可能被经常访问,这意味着,经常访问的数据需要能快速命中,而不常用的数据,需要淘汰掉。缓存策略:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Fre...原创 2019-11-29 21:50:34 · 284 阅读 · 0 评论 -
用单链表实现栈
一)栈栈:先进后出、后进先出二)用单链表实现栈第一步:初始化单链表结构/** * 用单链表实现栈 * @author ouyangjun */public class SingleChainTableStack<E> { /** 初始化单链表结构 */ static class Node<E> { E i...原创 2019-11-27 21:35:20 · 1968 阅读 · 0 评论 -
用单链表实现队列
一)队列规则:先进先出,后进后出二)用单链表实现队列第一步:先初始化单链表结构。声明两个指针,一个head指针指向头部结点,一个last指针指向尾部结点。初始化单链表时,头部head指针和尾部last指针是重合的。/** * 用单链表实现队列 * @author ouyangjun */public class SingleChainTableQueue<...原创 2019-11-27 21:10:31 · 3109 阅读 · 1 评论 -
Trie字典树
一)Trie字典树简介Trie字典树又可以称为前缀树。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。二)Trie字典树模型该模型就没有用具体的单词创建了,随便定义了一些错误单词。String[] words = {"a...原创 2019-10-11 21:00:11 · 150 阅读 · 0 评论 -
树堆(最小堆)
一)树堆简介实现:Treap=Tree+Heap简介:Treap是一棵二叉排序树,它的左子树和右子树分别是一个Treap,和一般的二叉排序树不同的是,Treap记录一个额外的数据,就是优先级。Treap在以关键码构成二叉排序树的同时,还满足堆的性质(在这里我们假设节点的优先级大于该节点的孩子的优先级)。但是这里要注意的是Treap和二叉堆有一点不同,就是二叉堆必须是完全二叉树,而Tre...原创 2019-10-09 20:40:02 · 425 阅读 · 0 评论 -
用Stack实现队列
一)Stack、队列简介Stack规则: 先进后出、后进先出队列规则: 先进先出,后进后出二)用Stack实现队列基本原理:第一步:初始化一个主Stack,存储进栈数据、再初始化一个辅助Stack,存储出栈数据。第二步:数据进队列时,直接进主Stack。第三步:数据出队列时,判断辅助Stack是否有数据,如果没有数据,从主栈把数据pop()到辅助Stack,再从...原创 2019-09-27 18:20:07 · 365 阅读 · 0 评论 -
伸展二叉树
一)伸展二叉树简介规则1、和二叉搜索树性质一样,比节点小的值排列在左边,比节点大的值排列在右边。规则2、当某个节点被访问时,伸展树会通过旋转使该节点成为树根。方便多次查找。二)伸展二叉树(采用自顶向下旋转)第一步:定义伸展二叉树结构/** * 伸展二叉树 * @author ouyangjun */public class SplayTree<T exte...原创 2019-09-25 23:10:56 · 171 阅读 · 0 评论 -
红黑树
一)红黑树简介规则1、每个节点要么是黑色,要么是红色(也可以用其它颜色表示,红黑色比较常用)。规则2、根节点一直是黑色的。规则3、每个叶子节点都是黑色的,并且为null(每个叶子到根的所有路径上不能有两个连续的红色节点)。规则4、从根节点到叶子节点或null子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。规则5、新插入的节点颜色总是红色的,因为黑色比红色多,...原创 2019-09-24 23:30:05 · 216 阅读 · 0 评论 -
AVL平衡二叉树
一)AVL平衡二叉树简介AVL平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。优点:节点之间高度相差不大(小于2),搜索节点时会比较快。缺点:新增或删除的时,可能导致二叉树失去平衡,需要重新旋转二叉树至平衡,性能稍微慢点。平衡二叉树模型:非平衡二叉树模型:根据非平衡二叉树转换成平衡二叉树,有四种旋转方式:左左旋转、...原创 2019-09-22 10:10:07 · 215 阅读 · 0 评论 -
二叉搜索树(二叉查找树)
一)二叉树简介二叉树:每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉搜索树(二叉查找树):左子节点(左子树)的值都比根节点的值小,右子节点(右子树)的值都比根节点的值大。二叉树节点计算方式:假设有N个节点,层级为i左子节点(左子树)数量计算方式:2*i<=N右子节点(右子树)数...原创 2019-09-20 21:30:14 · 391 阅读 · 0 评论 -
用Array实现Stack
一)Stack简介Stack也可称为栈,是一种有序的线性数据结构,属于一种只允许在栈的一端进行插入和删除的线性表。插入数据称为进栈或压栈,删除数据称为出栈或弹栈。进行操作的一端为栈顶,另一端为栈底。Stack规则:先进后出,后进先出Stack方法: 方法摘要 boolean empty() 测试堆栈是否为空。 ...原创 2019-09-14 21:50:11 · 768 阅读 · 0 评论 -
java中ArrayBlockingQueue、LinkedBlockingQueue队列简单使用
一)背景在编写springboot邮件篇章的时候,就在想邮件直接发送中失败了该怎么办等问题。就想到用队列的方式去存储邮件,所以就重新了解了一下java自带的一些队列,以此记录一下。二)ArrayBlockingQueue是一个由数组支持的有界队列package com.oysept.springboot.test;import java.util.concurrent.Array...原创 2019-08-16 20:31:30 · 1377 阅读 · 0 评论 -
环形单链表
一)链表简介链表概念:链表是一种物理存储单元上非连续、非顺序的存储结构,也就是说链表存储的数据不一定是有序的。链表结构:链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。单链表:每一个结点中,包含一个数据域,一个指针域,该指针域一直指向下一个结点。单链表缺点:查找某...原创 2019-09-07 23:25:06 · 261 阅读 · 0 评论 -
双链表
一)链表简介链表概念:链表是一种物理存储单元上非连续、非顺序的存储结构,也就是说链表存储的数据不一定是有序的。链表结构:链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。双链表:每一个结点中,包含一个数据域,两个指针域,一个指针域指向上一个结点,一个指针域指向下一个结点...原创 2019-09-06 22:50:07 · 193 阅读 · 0 评论 -
单链表
一)链表简介链表概念:链表是一种物理存储单元上非连续、非顺序的存储结构,也就是说链表存储的数据不一定是有序的。链表结构:链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。单链表:每一个结点中,包含一个数据域,一个指针域,该指针域一直指向下一个结点。单链表缺点:查找某...原创 2019-09-06 22:35:31 · 209 阅读 · 0 评论 -
用Array实现队列
一)队列简介在生活中,如坐车检票,超市购物等。这些按照先后顺序排列成一排,先进先出,后进后出的方式就是一个个队列模式。在计算机中,队列是一种数据结构,在程序中常用于数据传输,消息传递等方面。队列规则:先进先出,后进后出队列图解:从队头出队,从队尾进队二)用Array实现队列说明:该篇文章采用Array数组的方式实现。功能:队列只包括进队、队列是否已满、出队、队...原创 2019-09-06 22:35:07 · 630 阅读 · 0 评论