
数据结构与算法[体系]
靠谱的大钊
没啥写, 就这样
展开
-
构造遍历线索化二叉树{Java}
线索化二叉树文章目录线索化二叉树线索化二叉树基本的介绍线索化二叉树应用案例代码实现:准备工作堆二叉树进行中序线索化的方法遍历线索化二叉树的方法完整代码将数列{1,3,6,8,10,14} 构成一个二叉树 : n+1=7问题分析:当我们对上面的二叉树进行中序遍历时,数列为{8,3,10,1,14,6}但是6,8,10,14 这几个节点的左右指针,并没有完全利用上如果我们希望充分的利用各个节点的左右指针,让各个节点可以指向自己的前后节点,解决方案—线索化二叉树线索化二叉树基本的介绍n个结原创 2020-12-26 14:41:15 · 138 阅读 · 0 评论 -
顺序存储二叉树
顺序存储二叉树文章目录顺序存储二叉树概念顺序储存二叉树的特点:代码概念由数据的存储来看,数组存储方式和树的存储方式可以转换,即数组可以转换成树,树也可以转换称为数组顺序储存二叉树的特点:顺序二叉树通常就只考虑二叉树第n个元素的左子节点为2*n+1;第n个元素的右子节点为2*n+2;第n个元素的父节点为(n-1)/2;n 表示二叉树中的第n个元素需求: 给你一个数组 {1,2,3,4,5,6,7}, 要求以二叉树前序遍历的方式进行遍历。 前序遍历的结果应当为1,2,4,5,3,6,原创 2020-12-25 20:15:20 · 145 阅读 · 0 评论 -
十大排序8--堆排序(Heap Sort)
堆排序文章目录堆排序基本介绍大顶堆举例说明堆排序的基本思想:简单的思路代码实现将一个数组(二叉树), 调整成一个大顶堆//编写一个堆排序的方法完整代码图解:基本介绍堆排序是利用堆这种数据结构二设计的一种排序算法,堆排序是一种选择排序,他的最好最坏,平均复杂度都为O(nlogn), 它也是不稳定排序堆是具有一下性质的完全二叉树:每个节点的值都大于或者等于其左右孩子节点的值,称为大顶堆,没有要求结点的左孩子的值和右孩子的值的关系每个结点的值都小于或等于其左右孩子结点的值, 称为小顶堆大顶堆举例说原创 2020-12-20 17:35:28 · 512 阅读 · 0 评论 -
二叉树的基本操作 遍历,删除,查找Java(附带完整代码)
树结构的基础部分文章目录树结构的基础部分二叉树为什么要使用二叉树树示意图案例分析**前序遍历的方法****中序遍历****后序遍历**二叉树-查找指定节点前序遍历查找中序遍历查找后序遍历查找二叉树-删除节点代码实现递归删除结点完整代码二叉树为什么要使用二叉树数组方式的分析:优点:通过下标方式访问元素,速度快,对于有序数组,还可以通过二分查找提高检索速度缺点: 如果要检索具体某个值,或者插入值(按一定的顺序)回整体移动,效率低.2 链式储存方式的分析:优点: 在一定程度上对数组储存方式的优原创 2020-12-17 16:14:35 · 187 阅读 · 0 评论 -
hashTable(哈希表)Java实现
hashTable(哈希表)文章目录hashTable(哈希表)哈希表的介绍详细的hash请看应用:hashtable分析**键值(雇员)**链表(存放雇员)**创建HashTab 管理多条链表**具体操作add: 添加雇员在hashtable中//添加雇员到链表list: 显示雇员find: 查找雇员哈希表的介绍哈希表(Hashtable 也叫散列表) 是根据关键码值(key value) 而直接进行访问的数据结构,也就是说他是用过关键码值映射到表中一个位置来访问记录,以加快访问进度,这个映射函数原创 2020-12-13 15:58:22 · 222 阅读 · 0 评论 -
快速排序[综合优化写法]
快速排序优秀快排写法此文章python写法快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤如下从数列中挑出一个元素,称为基准(pivot)分区(partition):遍历数列,比基数小的元素放在左边,比他大的放在右边于是此次分区结束后,该基准就处于数列的中间位置,其左边的数全比它小(称为小与子序列),右边的数全比他大(称为大于子序列)。这样一次排序就造成了整体上的有序化。子数列排序:将小于子数列和大于子原创 2020-12-11 17:31:28 · 488 阅读 · 0 评论 -
Java常用的四种查找方法 1. 顺序查找 2. 二分查找 3. 插值查找 4. 斐波那契查找
查找方法:在Java常用的四种查找方法顺序查找二分查找插值查找斐波那契查找目录查找方法:顺序查找二分查找非递归二分法递归插值查找算法斐波那契(黄金分割法)查找算法基本介绍原理mid=low+F(k-1)-1if (key < temp[mid])if (key > temp[mid])顺序查找无序,有序均可利用循环依次进行遍历进行查找二分查找对一个有序数组进行二分查找{1,8, 10, 89, 1000, 1234} , 输入一个数看看该数组是否存在此数, 并且求出下标原创 2020-12-10 11:27:30 · 598 阅读 · 0 评论 -
十大排序5--快速排序(Quick Sort)
快速排序(Quick Sort)快速排序是冒泡排序的一种改进,基本思想(分治):通过一趟排序将要排序的数据分割成独立的两个部分,其中一部分的所有数据都比另外的一部分的所有数据都要小,然而按此方法对两部分数据进行分别进行快速排序,整个排序过程可以递归进行,因此可以达到目的public class QuickSortDemo { public static void main(String[] args) { int[] arr = {-9, 78, 0, 23, -原创 2020-11-25 18:24:55 · 217 阅读 · 0 评论 -
十大排序4--希尔排序
希尔排序(Shell Sort)基本思想:希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,该算法是冲破O(n2)的第一批算法之一,他与插入排序的不同之处在于,他会优先比较距离较远的元素基本思路:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键字越多,当增量减之到1时,整个文件恰被分成一组, 算法便终止public class ShellSortDemo { public st原创 2020-11-25 17:50:18 · 218 阅读 · 1 评论 -
十大排序3--选择排序及附代码
十大排序-插入排序插入排序Insertion Sort基本思想:在要排序的一组数中,假定前n-1个数已经排好序,现将第n个数插到前面的有序数列中,使得这n个数也是排好顺序.算法描述从第一个元素开始,该元素可以被认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移动到下一位置重复步骤三,直到直到已经排序的元素最小或者等于新元素的位置将新元素插入到该位置后重复步骤2~5代码 private static int[] in原创 2020-11-02 04:41:09 · 219 阅读 · 0 评论 -
十大排序2--选择排序及其优化附代码
十大排序-选择排序Selection Sort基本思想:选择排序Selection Sort时一种简单直观的排序算法.首先在末排序序列中找到最小(大)元素,然后存放在排序序列中起始位置,在从我i排序中继续寻找最小(大)的元素,然后放到已排序序列的末尾,重复以上方法直到所有元素均排序完毕.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FR5gpmcn-1604262085289)(1.gif)]代码代码一private static int[] sel原创 2020-11-02 04:23:34 · 155 阅读 · 0 评论 -
十大排序1--冒泡排序及其两种优化附代码
十大排序-冒泡排序冒泡排序基本思想:两个数比较大小,较大的数下沉,较小的数冒起来思路描述:比较两个相邻的元素,如果第一个比迪二个大,就交换他们两个对没一对相邻元素作同样的工作,从开始第一对到结束的最后一对,这样在最后元素应该会是虽大的数针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序结束代码实现代码一[未优化] public static int[] bubbleSort(int[] array) { for (int i = 0; i &原创 2020-11-02 04:05:10 · 172 阅读 · 0 评论 -
十大排序7--基数排序(RadixSort)
基数排序基数排序基本思想基数排序是使用空间换时间的经典算法基数排序属于"分配式排序",又称“桶子法” (bucket sort) ,他是通过各个位的值,将排序的元素分配至某些"桶"中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序法是桶排序的发展基数排序是1887赫尔曼· 何乐礼发明的。 ,他是实现的将整数位数切割成不同的数字,然后按每个位数分别比较基数排序基本思想将所有待比较数值统一为长度,数位短的数前补零,然后,从最低位开始,依次进行排序原创 2020-12-03 09:36:56 · 371 阅读 · 0 评论 -
十大排序6--归并排序(MergetSort)
归并排序归并排序,利用归并的思想实现排序,该方法才采用经典的分治策略,成一些小的问题然后递归求解, 而治的阶段则将分的阶段得到各答案"修补"在一起即分而治之归并排序思想示意图 1-基本思想:归并排序思想示意图 2-合并相邻有序子序列:取中间的值作为基准,两边的进行合并.类似于链表合并package com.nie.sort;import java.util.Arrays;/*归并排序 */public class MergetSort { public static原创 2020-12-03 09:34:24 · 201 阅读 · 0 评论 -
数据结构与算法--005-双向链表实现--Java
双向链表应用实例目录双向链表应用实例操作**遍历****添加**头部插入尾部插入指定的位置插入修改删除管理单链表的缺点分析单向链表,查找的方向只能是一个方向,而双链表可以向前或者后查找单向链表不能自我删除,需要辅助结点,而双向链表,可进行自我删除,所以我们单链表删除节点时,总是找到temp(待删除结点的前一个结点)操作遍历方向和单链表一样,可以向前也可以向后查找添加头部插入要插入放入的节点 Link newNode = new Link(data);将还没插入新结点之前链原创 2020-11-17 17:47:28 · 417 阅读 · 1 评论 -
数据结构与算法--004-队列链表实现--Java
链表目录链表单链表的应用实例**第一种方法在添加英雄时, 直接添加到链表的尾部****第二种方式在添加英雄时,根据排名将英雄插入到指定位置**修改节点的信息删除节点获取到单链表的节点个数(不统计头节点)查找单链表中的倒数第k个结点反转链表逆序打印完整代码链表是有序的列表, 但是它在内存中是存储如下链表是以节点的方式来储存.链式储存每个节点包含data 域, next 域: 指向下一个节点如图: 发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表, 根据实际的需求来确定原创 2020-11-10 22:13:27 · 310 阅读 · 0 评论 -
数据结构与算法--003-队列数组实现--Java
队列介绍目录队列介绍数组模拟队列思路存入数据的思路,addQueue取出数据getQueue创建队列判断队列是否满判断是否为空显示所有数据查看头元素完整代码数组的循环队列概述说明代码实现显示所有数据取出数据添加元素完整代码队列是一个有序列表,可以用数组或者链表实现先进先出,先存入队列的数据, 要先取出。 后存入的要后取出数组模拟队列思路队列本身就是有序列表,若使用数组的结构来储存队列的数据,则maxSize是从该队列的最大容量因为队列的输出,输入是分别从前后端来处理,因此需要两个变量fro原创 2020-11-08 12:34:12 · 292 阅读 · 0 评论 -
数据结构与算法--002-稀疏数组
稀疏数组当一个数组中的很多值默认是0,因此记录了很多没有意义的数据,因而需要稀疏数组基本介绍:当一个数组中大部分是由零,或者为同一个值的数组时,可以使用稀疏数组.稀疏数组处理方法:记录数组中一共有几行几列,有多少个不同的值把具有不同的元素的行列以及值记录在一个小规模中,从而缩小程序的规模二维数组转化稀疏数组的思路遍历原始数组的二维数组,得到有效数据的个数sum根据sum就可以创建sparseArrayint[sum+1][3][sum+1]:表示行数,第一行用来存放原始数组原创 2020-11-06 16:23:45 · 301 阅读 · 0 评论 -
数据结构与算法--001-概述
数据结构和算法概述程序=数据结构+算法数据结构是算法的基础线性结构特点:数据元素之间存在一对一的线性关系两种不同的储存结构,顺序储存结构(数组)和链式储存结构(链表).顺序储存的线性表称为顺序表,顺序表中的储存式连续的链式储存的线性表称为链表,链表中的储存元素不一定式连续的,元素节点中存放数据元素以及相邻元素的地址信息线性结构常见的由:数组,队列,链表和栈非线性结构包括二维数组,多维数组,广义表,树,图结构...原创 2020-11-06 15:50:52 · 159 阅读 · 0 评论