数据结构与算法
宋七夏
这个作者很懒,什么都没留下…
展开
-
Map集合--LinkedHashMap1.8
文章目录LinkedHashMap(1.8)存储结构构造器添加LRU 算法afterNodeAccess()afterNodeInsertion()LRU 缓存LinkedHashMap(1.8)LinkedHashMap 继承了 HasahMap,并且它的存储结构也是继承了 HashMap 的 Node 类;LinkedHashMap 是一个非线程安全的集合,使用用双向链表的结构,把所有存储在 HashMap 中的数据连接起来,LinkedHashMap 的默认实现是按插入顺序排序的(只是用前后指原创 2020-08-30 20:41:17 · 433 阅读 · 0 评论 -
平衡二叉树(AVL树)Java语言实现
参考:《数据结构与算法分析》和《算法(第四版)》文章目录概述旋转左旋转右旋转右左双旋转(RL)左右双旋转(LR)判断是否平衡方法 balance所有代码概述之前的二分搜索树可能会出现最坏的情况,如果添加的元素为:1,2,3,4,5 和 6 ,那么,二分搜索树就会像链表一样,插入速度没有影响,但是查询速度明显降低(因为需要依次比较),不能发挥 BST 的优势,因为每次还需要比较左子树,其查询速度比单链表还慢;因此,需要使用 平衡二叉树来解决此问题:平衡二叉树也叫平衡二叉搜索树(Self-b原创 2020-06-27 10:38:23 · 417 阅读 · 0 评论 -
Java集合--HashMap(1.7与1.8)底层实现
文章目录MapHashMap(1.7 了解)存储结构Entry 结点基本属性构造器put 方法(重点)putForNullKey 方法addEntry 和 createEntry 方法确定桶下标计算 hash 值确定下标(为什么这样处理)总结上述问题扩容MapMap 集合是有 Key 和 value 的(键值对),Collection 集合是只有 value;Map 接口并不是 Collection 下的;TreeMap:基于红黑树实现;HashMap:基于哈希表(数组+链表+红黑树(1.8原创 2020-06-15 09:51:40 · 1000 阅读 · 0 评论 -
Java集合--List(ArrayList,LinkedList和Vector底层实现)
ListList 接口继承了 Collection ,List 中的元素有序可重复;List 接口的实现类主要有 ArrayList,LinkedList 和 Vector;ArrayListArrayList 是 List 使用中最常用的实现类,它的底层数据结构是数组,ArrayList 查询速度快,效率高,但是增和删较慢,并且是线程不安全的集合;基本属性ArrayList 底层是一个数组,其默认的初始容量为10 //数据对象存放的数组,当前对象不参与序列化(主要是关键字trans原创 2020-06-13 08:56:16 · 1103 阅读 · 0 评论 -
二分搜索树(二叉排序树)Java实现
二分搜索树(二叉查找树) 参考:《数据结构与算法分析》和《算法(第四版)》特性 二分搜索树(Binary Search Tree,BST,后面全用BST代替)也可叫做二叉查找树。它不仅可以查找数据,还可以高效地插入、删除数据。 特性:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;...原创 2020-05-03 21:12:44 · 457 阅读 · 0 评论 -
字符匹配KMP算法Java实现
KMP算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。暴力匹配 现在需要确定一个字符串needle是否在另一个字符串haystack里面,可以使用最简单得暴力匹配...原创 2020-02-08 18:46:47 · 190 阅读 · 0 评论 -
递归解决八皇后问题 Java语言
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。在这里,我们将会使用二维数组和递归的方法来解决这个复杂的问题。 第一种方法是通过复制最开始的棋盘arr(开始的棋盘是一个二维数组,当然初始化...原创 2019-07-31 18:10:48 · 677 阅读 · 0 评论 -
循环队列的顺序存储结构Java
循环队列的顺序存储结构在上次,我们讲到的是,队列的顺序存储结构也是由ArrayList实现的,从此就可以看出,在入队时候的时间复杂度为O(1),但是在出队时候的时间复杂度为O(n),这是因为,每次在出队后要将数组后面的有效元素前移一位。所以,这里就会用到循环队列,显然,这种队列也是顺序存储结构,在这个循环队列中也会去实现接口Queue。首先,我们要想到的是如何将一般的队列改变为循环队列。...原创 2019-12-19 16:33:54 · 3143 阅读 · 0 评论 -
队列的顺序和链式存储结构Java实现
队列的顺序存储结构对于队列,是只允许在一端进行插入操作,在另一端进行删除操作的线性表。首先,我们先看一下Queue的接口实现:public interface Queue<E> extends Iterable<E>{ //获取队列中的元素个数 int getSize(); //判空 boolean isEmpty(); /...原创 2019-12-17 21:00:09 · 287 阅读 · 1 评论 -
线性表的链式存储结构Java
线性表的链式存储结构我们接着上次的顺序表来讲这次的链表。n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域,所以叫做单链表。我们将链表中的第一个结点的存储位置叫做头指针。为了方便对链表进行操作,会在单链表的第一个结点前附设一个结点,叫做头结点。上图是一个带有虚头结点的单链表。首先看一下单链表的存储实现。/** * @author 七夏 * @...原创 2019-12-17 20:35:29 · 437 阅读 · 1 评论 -
普利姆(Prim)算法Java语言描述
普利姆算法把构造连通网的最小代价生成树称为最小生成树。我们通过构造一个图来说明这个算法。对这个图写出其arc邻接矩阵:在之前的图的存储就够中,已经有了一个存储结构为MGragh的邻接矩阵,其中,INFINITY代表∞,我们用数字65535来表示。现在,我们来看其核心代码:public void MinSpanTree(){ int min,j,k; int[] adjvex = ...原创 2019-10-23 10:45:40 · 252 阅读 · 0 评论 -
栈的顺序存储和链式存储结构Java
在之前的线性表的存储结构中,会有顺序存储结构和链式存储结构,对于栈和队列来说,也是一样的。对于栈,是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。对于队列,是只允许在一端进行插入操作,在另一端进行删除操作的线性表。栈的顺序存储结构在栈的顺...原创 2019-10-23 08:58:14 · 446 阅读 · 1 评论 -
线性表的顺序存储结构Java
线性表的顺序存储线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表(a1,a2,a3,…,an)的顺序存储示意图如上图。首先,介绍一下线性表的顺序存储结构:Java语言(其他语言一样)种用一维数组来实现顺序存储结构,即第一个元素存放到数组中下标为0的位置上,当然也可以是下标为1,这个都可以。然后把线性表相邻的元素存储在数组中相邻的位置。线性表的顺序存储...原创 2019-10-16 11:04:16 · 436 阅读 · 2 评论 -
图的存储以及图的深度,广度优先遍历Java语言
图的深度优先遍历深度优先遍历(Depth_First_Search),也有称为深度优先搜索,简称为DFS。这种遍历方法,从图中的某一个顶点开始遍历搜索,首先访问该顶点V(我们可以将其打印),然后从V开始寻找未被访问过的邻接顶点,将遍历后的顶点的状态设置为已访问,如果某个顶点已经访问过,则返回“上层”其实就是一种递归(它相当于树的前序遍历),直至图中的所有都被访问(或打印)。对于邻接矩阵形式...原创 2019-10-15 09:27:31 · 398 阅读 · 1 评论 -
数据结构与算法之图和图的存储结构Java语言描述
图(Graph)是由顶点的又穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性表中把数据元素称为元素,树中称为结点,而在图中数据元素称为顶点。图按有无方向分类的话,可以分为:无向图和有向图。图按边的多少分类的话,可以分为:稀疏图和稠密图。如上图,G1来说,该图就是一个无向图;无向图顶点的边数叫做度,分为入度和出度...原创 2019-10-14 21:38:50 · 430 阅读 · 0 评论