![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 79
爱得恋
这个作者很懒,什么都没留下…
展开
-
大数操作——BigInteger、BigDecimal
今天又是收获的一天~~关于学习大数操作来源于一道编程题:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。当时我看到这道题第一反应就是把两个串通过nteger.valueOf()转为Integer然后想加,但事实并没有这么简单,不然怎末叫大数相加呢~好了,来进入正题我们知道在Java中,存储整行最大的范围就是long类型----64比特位,但是如果大于这个值又改怎末办?同样的,对于浮点数double类型的精度只能达到16为,要是精度高于16位呢?这里就引入了大数操作——Bi原创 2021-02-21 20:36:27 · 817 阅读 · 6 评论 -
八大排序(3)------归并排序
思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。总而言之,归并排序总体分为两步:分解与合并先分解为许多有序的子区间,然后再将这些有序的子区间合并成一个有序区间。见如下图所示:因此,我们在实现该算法时就分为三步:将区间划分为两部分将这两部分分为有序的子区间将子区间合并成一个有序区间首先,我们先将整体思路原创 2021-01-03 20:30:11 · 121 阅读 · 0 评论 -
八大排序(2)------交换排序(冒泡、快排)
排序一、交换排序1、冒泡排序1、快速排序二、归并排序三、基数排序一、交换排序1、冒泡排序1、快速排序二、归并排序三、基数排序原创 2020-12-23 20:19:28 · 394 阅读 · 2 评论 -
八大排序(1)--------插入排序(直接插入、希尔)、选择排序(选择排序、堆排序)
排序算法一、排序介绍1、排序算法分类2、排序性能指标二、插入排序1、直接插入排序2、希尔排序一、排序介绍排序算法,顾名思义,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。1、排序算法分类对于排序算法,主要分为两大类:内部排序和外部排序;内部排序是数据记录在内存中进行排序;外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。比如:100亿个整型数据需要被排序,这写数据需要占(100亿*4字节)/1000^3=大概需要40G内存空间原创 2020-12-19 16:20:37 · 850 阅读 · 4 评论 -
堆——数据结构
这里写自定义目录标题堆的基本概念堆的常用方法构建首先,要说明一下本篇文章说的堆和JVM内存结构里边的堆是两个东西。它是优先级队列的底层数据结构。new出来的空间(new一个对象)-------->这里的堆指的是一块具有特殊作用的内存空间(JVM内存区域中)优先级队列的底层数据结构 ------->这里的堆是一种数据结构那么什么是堆这种数据结构呢?堆的基本概念这个堆是建立在完全二叉树的存储方式上,我们知道完全二叉树适合用顺序的存储方式来存储,因为它是没有满的满二叉树,所以通过数组来原创 2020-12-17 17:03:45 · 1254 阅读 · 2 评论 -
判断是否为完全二叉树(两种方法)
完全二叉树也就是没有满的满二叉树,它的节点在每一层一定是连续分布的。如果出现哪一层中两个非空节点间隔一个空节点,那一定不是完全二叉树。如下图所示:假设这棵完全二叉树有K层,因此我们可以总结一下完全二叉树的规律:前K-2层:每个节点都有两个孩子,节点饱和前K-1层:节点肯定是饱和的—>到达了最大值第K-1层:不一定所有的节点都有孩子节点,如果有孩子节点,至少要是左孩子节点,有可能出现不饱和节点方法一:从上面的规律中我们可以知道:完全二叉树的前k-1层一定是包和节点,第k-1层就可能原创 2020-11-07 11:59:11 · 40969 阅读 · 18 评论 -
二叉树 Ⅳ —— 二叉树基本操作
二叉树1、求总结点个数2、求叶子结点个数3、求第 k 层结点个数4、获取二叉树的高度5、判断这个节点是否在树中1、求总结点个数很明确,就是求该二叉树总共有多少节点数。那么,一棵二叉树节点之和就等于根节点+左子树节点数+右子树节点数。而左/右子树又可以看成一棵新的二叉树,节点数依然等于左右子树的根节点+其左右子树的节点数,依次类推。题解关键:整体问题拆分成小问题------》每一个子树的节点等于左子树节点数+右子树节点数+根节点对于上面节点总数的求法,我们不难看出可以采用递归的求法。代码:publ原创 2020-10-31 11:49:41 · 482 阅读 · 0 评论 -
二叉树 III —— 二叉树非递归遍历(前、中、后序)
二叉树非递归遍历前序非递归遍历中序非递归遍历后序非递归遍历在上一篇博客中我们介绍了二叉树的前中后序递归遍历,本篇博客我们来看看如何将递归遍历变为非递归遍历。博客链接:二叉树存储、递归遍历(前、中、后序).前序非递归遍历对于前序遍历我们知道它的访问顺序是根节点---->根节点的左子树---->根节点的右子树。对于递归改为非递归,一般有两种思路:借助栈实现通过for循环实现因此,我们的递归遍历就采用借助栈来实现。并且对于前序非递归遍历我们有两种思路。思路一:我们先思考一下,前序原创 2020-10-30 12:57:59 · 120 阅读 · 0 评论 -
二叉树 II —— 二叉树存储、递归遍历(前、中、后序)
二叉树的存储我们在上一篇博客中提到了二叉树的存储方式,二**叉树的存储结构分为:顺序存储和类似于链表的链式存储。博客链接:二叉树 I ——二叉树概念、性质.顺序存储结构主要用来存储完全二叉树而对于非完全二叉树(尤其是节点高度相差较大的节点采用链式存储)本片博客主要说一下二叉树的链式存储:二叉树和链表类似,主要通过结点的组合来表示二叉树,我们也知道二叉树的节点主要包括:值域、左孩子节点、右孩子节点、父节点(可选),因此,二叉树有如下表示形式:孩子表示法:class Node { in原创 2020-10-30 11:14:22 · 166 阅读 · 0 评论 -
二叉树 I —— 二叉树概念、性质
一、二叉树概念二叉树:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒。两种特殊的二叉树满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。完全二叉树:完全二叉树是效率很高的数据结构,完全二叉原创 2020-10-28 20:19:58 · 1094 阅读 · 0 评论 -
Map和Set 1
一、Map和Set介绍Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有:直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢二分查找,时间复杂度为,但搜索前必须要求序列是有序的上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,如果在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本节介绍的Map和Set是一种适合动态查找的集合容器。1、模型存储元素的类型:K-V模型(键值对)原创 2020-10-10 16:31:42 · 150 阅读 · 2 评论 -
实现链表及相关的方法 2
链表:将大的数据放在x的右边,小的数据放在x的左边删除重复的节点判断链表是否为回文判断这个链表中是否有环:将大的数据放在x的右边,小的数据放在x的左边思路:将原链表分割为两个链表:一个链表是存大于元素X的节点,另一个链表存小于元素X的节点。遍历完整个链表之后,将新产生的两个链表串起来。下面提供两种方法,其实大同小异,但是因为链表的最后一个元素需要指向空,如果少了这个就会出现问题。所以在方法二中,遍历的过程就将末尾指向空。方法一: //将大的数据放在x的右边,小的数据放在x的左边 p原创 2020-09-25 13:15:45 · 63 阅读 · 0 评论 -
实现链表及相关的方法 1
链表链表的节点:创建链表的类:插入元素:头插法尾插法(也要分是否为第一次插入)获取单链表的长度在任意位置插入(第一个数据节点的下标为0)打印链表查找前驱删除第一次出现关键字为key的节点查找关键字key是否在单链表中删除所有值为key的节点反转一个单链表——头插法反转一个单链表——三个引用改变指向法查找链表中间节点(快慢指针法)查找链表中倒数第k个节点本篇博客主要是自己实现一下链表。链表的节点://节点类class ListNode { public int data; public原创 2020-09-24 20:29:04 · 86 阅读 · 0 评论 -
栈和队列1——队列
下图是栈和队列的实现关系:从上图中,我们可以得知,队列是一个接口,而栈是一个实现类,对于它两的实现与原理将在后面详细介绍。本节主要说一下队列这种数据结构。一、实现与继承关系:首先,我们先来认识一下有关队列的接口和实现类:1)Deque是实现Queue接口的一个双端队列2)LinkedList是实现了List和Deque接口的一个实现类见下面源码:3)PriorityQueue是实现了Queue接口的优先级队列二、Queue的使用1、Queue作为一个接口,可以通过实现类向上转型new原创 2020-08-01 21:57:08 · 362 阅读 · 0 评论 -
Connection-List
一、ListList接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。List 接口存储一组不唯一,有序(插入顺序)的对象。List 接口有三个实现类:LinkedList: 基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;ArrayList: 基于数组实现,非线程安全的,效率原创 2020-07-20 19:05:27 · 318 阅读 · 0 评论 -
Collection接口、泛型、包装类
1 、基本关系说明Java 集合框架Java Collection Framework ,又被称为容器container ,是定义在 java.util 包下的一组接口interfaces 和其实现类classes 。其主要表现为将多个元素element 置于一个单元中,用于对这些元素进行快速、便捷的存储store 、检索retrieve 、管理manipulate ,即平时我们俗称的增删查改CRUD 。Collection :用来存储管理一组对象objects ,这些对象一般被成为元素elemen原创 2020-07-20 10:38:50 · 255 阅读 · 1 评论