![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java语言DS
文章平均质量分 62
数据结构(Data Structure)是一门研究数据的组织和管理的学科,往往从外在表现为一组数据的集合或容器。
ningjingjing0614
这个作者很懒,什么都没留下…
展开
-
实现搜索树的插入,查找和删除
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树操作—查找操作—插入如果树为空树,即根 == null,直接插入如果树不是空树,按照查找逻辑确定插入位置,插入新结点操作—删除设待删除结点为 cur, 待删除结点的双亲结点为 parentcur.left == nullcur 是 root,则原创 2021-08-22 22:29:50 · 210 阅读 · 0 评论 -
堆的向上调整
注意:堆的向上调整的前提是除了传入的index位置的元素不符合堆的性质,其他元素都符合,才能进行向上调整。堆的向上调整2种实现代码。(小堆) public static void shiftUp(int[] array, int index) { while (index != 0){ int parentIndex = (index - 1) / 2; if (array[parentIndex] <= array[index原创 2021-08-21 16:09:16 · 125 阅读 · 0 评论 -
堆的向下调整以及创建
注意:堆的向下调整的前提是除了传入的index位置的元素不符合堆的性质,其他元素都符合,才能进行向下调整。堆的向下调整2种实现代码。(小堆) public static void shiftDown1(int[] array, int index) { int size = array.length; while (true){ int left = 2 * index + 1; if (left >= si原创 2021-08-21 14:16:04 · 113 阅读 · 0 评论 -
判断二叉树是不是完全二叉树
满二叉树: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是2k−12^k-12k−1 ,则它就是满二叉树。完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。 public boolean isCompleteTree(Tree原创 2021-08-20 23:19:10 · 849 阅读 · 0 评论 -
二叉树的遍历
深度优先遍历是利用栈的性质,采用递归或者非递归的方式进行的。深度优先遍历包括前序遍历、中序遍历和后序遍历。广度优先遍历利用的是队列的性质,采用层序遍历的方法进行的。原创 2021-08-20 10:26:25 · 99 阅读 · 0 评论 -
非递归实现二叉树的前序、中序和后序遍历
非递归实现二叉树的前序遍历需要使用到栈的回溯作用。import java.util.Stack;class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = va原创 2021-08-19 19:26:19 · 142 阅读 · 0 评论 -
一篇看懂快速排序QuickSort算法与代码
目录原理代码实现代码分析性能分析稳定性原理快速排序(Quicksort)是对冒泡排序的一种改进,由东尼·霍尔在1960年提出。快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序不是稳定的排序算法。快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:原创 2021-04-08 21:33:55 · 346 阅读 · 0 评论 -
七大经典排序算法总结
概念排序排序:排序是计算机的一种操作方法,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。(就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作)。通常我们提到的排序指的是排升序,就是按从小到大的顺序排列。通常意义上的排序都是指的原地排序(in place sort)。稳定性两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法。排序算法简介Java语言中基于比较的“原地”排序算法有7种。(基于比较能力是原创 2021-04-09 16:22:22 · 181 阅读 · 0 评论 -
一篇看懂归并排序MergeSort算法与代码
目录原理代码实现代码分析性能分析稳定性原理归并排序(MergeSort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是稳定的排序算法。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法组合实现:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);自下而原创 2021-04-09 16:12:57 · 582 阅读 · 0 评论 -
一篇看懂堆排序HeapSort算法与代码
目录原理代码实现代码分析性能分析稳定性原理堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序不具备稳定性。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:1、大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;2、小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的基本原理也是选择排序,只是不再在使原创 2021-04-08 00:43:59 · 280 阅读 · 0 评论 -
一篇看懂希尔排序ShellSort算法与代码
目录原理代码实现代码分析性能分析稳定性原理希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序是不稳定的排序方法。希尔排序法的的基本思原创 2021-04-07 16:10:37 · 114 阅读 · 2 评论 -
一篇看懂插入排序InsertSort算法与代码
目录原理代码实现代码分析性能分析稳定性原理插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序是稳定的排序算法。能用冒泡排序算法的必然能用插入排序。插入排序时将整个区间被分为有序区间,和无序区间。每次选择无序区间的第一个元原创 2021-04-06 23:57:44 · 223 阅读 · 2 评论 -
一篇看懂选择排序Select Sort算法与代码
目录原理代码实现代码分析性能分析稳定性原理选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最大(或最小)的一个元素,存放在序列的最后(起始)位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。一趟选择排序结束后,最大的数在最后面,再遍历未排序区间,第n趟结束后,前n大的n个数在集合的最后面,循环这个步骤,全部排序完成数组有序。代码实现 public static void selectSort(int[] arra原创 2021-04-06 22:10:40 · 223 阅读 · 2 评论 -
一篇看懂冒泡排序Bubble Sort算法与代码
目录原理代码实现性能分析稳定性原理冒泡排序(Bubble Sort),是一种计算机科学领域的较简单基础的排序算法。其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。一趟冒泡结束后,最大的数在最后面,再遍历未排序区间,第二趟结束后,最大的两个数在后面,循环这个步骤,全部排序完成数组有序。代码实现基本代码: public static void b原创 2021-04-06 18:33:39 · 233 阅读 · 0 评论 -
顺序表的迭代能力和迭代器
目录迭代顺序表的迭代能力和迭代器迭代元素(Element):被管理的原子数据,元素类型不限。集合(Collection):存放元素的容器,需要利用一定的数据结构知识对元素进行组织。迭代(Iterate)/遍历(Traversal):在数据结构的语境下,往往表示对一个集合中的所有元素都按照一定的顺序处理一次。Java中常见的Iterate接口和继承的类:TODO:图片顺序表ArrayList的继承链条简单版:TODO:图片顺序表的迭代能力和迭代器每种容器(Collection)都是具备迭代原创 2021-03-31 17:01:46 · 132 阅读 · 0 评论 -
认识线性表和顺序表
目录线性表顺序表线性表线性表(linear list)是n个具有相同特性的数据元素的的有限序列。线性表是一种在实际中广泛使用的数据结构,线性表用于存储逻辑关系为“一对一”的数据,常见的线性表有:顺序表、链表、栈、队列、字符串……线性结构特点:元素和元素之间有前后关系元素会有在第几个位置的概念,位置通过下标(index)表示,从 0 开始插入可以根据位置的不同,分为:头插、尾插、按位置插入删除可以根据位置的不同,分为:头删、尾删、按位置删除遍历可以分为从前往后遍历和从后往前遍历Java 中原创 2021-03-28 20:51:37 · 211 阅读 · 0 评论