数据结构和算法
心猿意碼
用心记录
展开
-
线索化二叉树
概念对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。注意:线索链...原创 2020-05-08 12:05:48 · 6254 阅读 · 0 评论 -
二叉树
为什么需要树这种数据结构1)数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低画出操作示意图:2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺...原创 2020-05-08 10:39:08 · 6009 阅读 · 0 评论 -
二叉树遍历查找
1)前序遍历:先输出父节点,再遍历左子树和右子树2)中序遍历:先遍历左子树,再输出父节点,再遍历右子树3)后序遍历:先遍历左子树,再遍历右子树,最后输出父节点4)小结:看输出父节点的顺序,就确定是前序,中序还是后序package com.atguigu.tree;public class BinaryTreeDemo { public static void mai...原创 2020-05-08 10:45:31 · 370 阅读 · 1 评论 -
哈希表
一、什么是Hash表哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。记录的存储位置=f(关键字)这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这...原创 2020-05-07 20:14:27 · 8004 阅读 · 0 评论 -
斐波那契查找
斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为F[n](如果要补充元素,则补充重复最后一个元素,直到满足F[n]个元素),完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。斐波那契查找原理与二分查找相似...原创 2020-04-30 11:52:18 · 247 阅读 · 0 评论 -
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列查找过程首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。...原创 2020-04-29 17:49:24 · 5991 阅读 · 0 评论 -
基数排序
基数排序介绍1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3)基数排序(Radix Sort)是桶排序的扩展...原创 2020-04-29 14:25:32 · 6061 阅读 · 0 评论 -
归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之(divide - conquer);每个递归过程涉及三个步骤第一, 分解: 把待排序的 n 个元素的序列分解...原创 2020-04-28 15:05:24 · 6005 阅读 · 0 评论 -
快速排序
转一篇详细的介绍。https://blog.csdn.net/leoma2012/article/details/88711016问题: 快速排序为什么要从基准数的对面开始移动?如果选取最左边的数arr[left]作为基准数,那么先从右边开始可保证i,j在相遇时,相遇数是小于基准数的,交换之后temp所在位置的左边都小于temp。但先从左边开始,相遇数是大于基准数的,无法满足te...原创 2020-04-27 17:38:20 · 5975 阅读 · 0 评论 -
希尔排序法
希尔排序法基本思想:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序法的示意图:...原创 2020-04-27 15:11:42 · 9113 阅读 · 0 评论 -
插入排序
插入排序(Insertion Sorting)的基本思想:把 n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。插入排序思路图: 括号内为有序表代码实现:packa...原创 2020-04-27 13:18:25 · 8647 阅读 · 0 评论 -
选择排序
选择排序的基本思想是:如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换(说明一点,如果没有比原本在第0位置上的元素小的就不用交换了,后面的同样是),然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换,.......直到所有元素都排序好(也就是直到从剩下的2个元素中找到最小的元素与第N...原创 2020-04-27 11:41:36 · 8694 阅读 · 0 评论 -
冒泡排序
思路:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。package com.ycx.test;import java.util.Arrays;public class BubbleSort { public static voi...原创 2020-04-27 11:25:10 · 8646 阅读 · 0 评论 -
稀疏数组和队列
一、稀疏 sparsearray数组1.实际的需求编写的五子棋程序中,有存盘退出和续上盘的功能:因为该二维数组的很多值是默认值 0,因此记录了很多没有意义的数据.->稀疏数组。2.基本介绍稀疏数组的处理方法是:1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模3.应用实例...原创 2020-04-24 11:01:48 · 8654 阅读 · 0 评论