数据结构
文章平均质量分 64
@追风少年
"code".equals("life") ? "false" : "success"
展开
-
Java核心技术卷知识点总结
基本数据类型byte(1字节,8位)short(2字节,16位)int(4 字节 32位)long(8字节 , 64位)float(4字节 32位)double(8字节 , 64位)char(2字节 16位)boolean(4字节 32位)面向对象的特点面向对象的三大特点:继承、封装、多态面向对象就是将一个模块或者是一个完整需求按照某些特点或者功能进行拆分,将具有共有特性的封装到一起,可以独立进行操作的这种低耦合、易扩展维护的思想多态,简述多态多态简单来..原创 2021-02-21 21:10:07 · 222 阅读 · 0 评论 -
Java:数组30多行代码实现堆排序
在堆的数据结构中,堆中的最大值总是位于根节点(在优先队列中使用堆的话堆中的最小值位于根节点)。堆中定义以下几种操作:1、最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点2、创建最大堆(Build Max Heap):将堆中的所有数据重新排序3、堆排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整的递归运算...原创 2020-05-22 11:58:08 · 5758 阅读 · 0 评论 -
java构建哈夫曼树,实现哈夫曼编码和译码
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。 我们通过一个具体的实例来讲解哈夫曼树的构造以及编码和反编码。比如说我们要对一字符串进行01编码,该如何做?我们要清楚为什么要使用哈夫曼编码?答案很简单,哈夫曼编码占位可以做到最少。一、给出指定字符串二、统计各个字母出现的次数三、以每个字母为一个叶子节点,出现次数作为权重,构建哈夫曼树注:每次挑选两个权重最小的结点执行父节点以此类推,得到最终的哈夫曼树:我们可以得到根节点的权值为18。四、进行编码从根节点开始,路径左为.原创 2020-05-14 20:16:41 · 8150 阅读 · 1 评论 -
HashMap 原理详解
一、对HashMap的了解首先我们要知道什么是哈希表以及它的结构。在介绍哈希表之前我们需要了解并且掌握数组、链表以及红黑树的结构以及特点。1、数组: 将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大...原创 2020-04-05 17:43:08 · 5891 阅读 · 0 评论 -
java实现快速排序(简洁模板)
快速排序的算法思想基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(low指向起始位置,high指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换low和high位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换low和high位置的值,如...原创 2020-03-08 17:57:08 · 6195 阅读 · 2 评论 -
java实现归并排序
归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。平均时间复杂度为O(n logn)归并排序,它有两大核心操作:一个是...原创 2020-03-08 17:44:42 · 5572 阅读 · 0 评论 -
数组与链表的区别
相信我们很多人都知道数组查询非常快,增删开销比较大;而链表却是相反的,可是为什么会有这种结果呢?他们的区别又是什么呢?数组数组将每一个元素在内存中连续存储,所以在查找数据的时候直接根据数组索引进行查找,时间复杂度为O(1),因此查询效率比较高。但是我们使用数组存储数据的时候需要申请一段连续的内存空间,且数组长度确定,再进行增删的时候数组的长度无法变化,增加的时候可能会超出,删除的时候...原创 2020-03-03 11:14:33 · 2977 阅读 · 0 评论 -
java实现插入排序以及原理解释
插入排序1、排序原理及其复杂度插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序的平均时间复杂度为O(n2),空间复杂度为O(1)。是一种稳定排序。2、算法讲解(1)、从第一个元素开始,该元素可以认为已经被排序;(2)、取出下一个元素,在已经排序的元素序...原创 2020-01-15 22:30:48 · 413 阅读 · 0 评论 -
java实现选择排序及其原理解释
选择排序1、排序原理及其复杂度选择排序(Selection-sort)是一种简单直观的排序算法。工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的平均时间复杂度为O(n2),空间复杂度为O(1),是一种不稳定排序。2、算法讲解(1)、首先在...原创 2020-01-15 22:10:33 · 277 阅读 · 0 评论 -
java实现冒泡排序
冒泡排序1、简述冒泡排序是一种简单并且基础的一种算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序的平均时间复杂度为O(n2)。冒泡是一种稳定排序。2、算法过程(原理)(1)、对相邻的元素进行比较。如果第一个大于第二个,就将两者交换。(2)、对每一组相邻的元素进行...原创 2020-01-15 11:34:06 · 96 阅读 · 0 评论 -
树的广度优先插入以及广度优先遍历
树的广度优先插入以及广度优先遍历(二叉树)重点:树的广度操作 二叉树的广度优先插入借助队列来实现一、对二叉树的认识:二叉树是每个结点最多有两个子树的树结构。二、本文主要是对树的广度优先插入进行操作。三、原理解析:1、首先建立一个队列(原理请参考 “循环队列的最优实现” 一文)源码如下:public class CilQueDemo<T> { private T...原创 2020-01-09 17:45:59 · 173 阅读 · 0 评论 -
栈的最优实现(数组实现)
一、对栈的简单理解1、栈是一种运算受限(只允许在表尾进行插入和删除)的线性表(先入后出);2、栈是对程序指令进行顺序控制的;3、(与线程的关系)每个线程都有一个线程栈,线程之内的所有方法(也称为线程栈方法)都对Threadlocal共享,出了线程就不再共享。4、从栈中每次取出的数据都是最新数据,可以边放入边取出。二、用数组实现栈的进出操作为什么用数组实现而不用链表呢?很简单,最大原...原创 2019-12-13 12:44:30 · 226 阅读 · 0 评论 -
链表的增删改查实现(递归与非递归实现)
链表1、链表的概念:链表是一种物理存储单元上非连续、非顺序的存储结构。2、原理图:3、增删改查操作实现(递归):(1)、首先创建一个Node类:public class Node { int data; //结点中存储数据区域 Node next; //指向下一个结点}(2)、增删改查(递归实现):增加 : (本例介绍在尾部插入)在增加的过程中,先找到最后一个结点(nex...原创 2019-12-21 22:14:26 · 236 阅读 · 0 评论 -
循环队列的最优实现(数组实现)
一、对的简单理解原创 2019-12-14 23:08:04 · 1296 阅读 · 1 评论