![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
数据结构与算法
小松狮
萌新
展开
-
数据结构-稀疏数组
第一节 稀疏数组二维数组转稀疏数组的思路1、遍历原始的二维数组,得到有效数据的个数sum2、根据sum就可以创建稀疏数组sparseArr int[sum+1] [3]3、将二维数组的有效数据存入到稀疏数组稀疏数组转原始的二维数组的思路1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组2、在读取稀疏数组后几行的数据,并赋给原始的二维数组即可...原创 2022-04-07 17:35:17 · 47 阅读 · 0 评论 -
数据结构-队列
队列是一个有序列表,可以用数组或链表来实现遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的数据要后取出原创 2022-04-09 17:07:08 · 40 阅读 · 0 评论 -
数据结构-单链表
链表(Linked List)是有序的列表1、链表是以节点的方式来存储2、每个节点包含data域,next域:指向下一个节点3、链表的各个节点不一定是连续存储4、链表分带头节点的链表和没有头节点的链表,根据实际需求来确定...原创 2022-04-20 19:37:28 · 101 阅读 · 0 评论 -
数据结构-双链表
单向链表的缺点:1、单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找2、单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除原创 2022-04-26 16:15:14 · 850 阅读 · 0 评论 -
数据结构-单向环形链表(约瑟夫问题)
package linkedlist;public class Josephu { public static void main(String[] args) { //测试构建环形链表和遍历 CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList(); circleSingleLinkedList.addBoy(20); //circle原创 2022-04-26 20:35:09 · 876 阅读 · 0 评论 -
数据结构-栈
栈(stack)栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反栈的应用场景1、子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中2、处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变原创 2022-05-09 16:49:46 · 160 阅读 · 0 评论 -
数据结构-递归
递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于解决复杂的问题递归用于解决什么问题?1、各种数学问题:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子问题2、各种算法中也会使用递归,比如:快排、归并排序、二分查找、分治算法3、将用栈解决的问题->递归代码比较简洁递归需要遵守的重要规则:1、执行一个方法时,就创建一个新的受保护的独立空间(栈空间)2、方法的局部变量是独立的,不会相互影响3、如果方法中使用的是引用类型变量,就会共享该引用类型的数据4、递归必须向退出递归原创 2022-05-12 11:04:31 · 589 阅读 · 0 评论 -
数据结构-排序算法(1)
排序也称排序算法,排序是将一组数据,依指定的顺序进行排列的过程排序的分类1、内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序2、外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序内部排序包括:插入排序(直接插入排序、希尔排序)、选择排序(简单选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序、基数排序时间复杂度度量一个程序(算法)执行时间的两种方法:1、事后统计的方法这种方法可行,但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运原创 2022-05-18 16:06:01 · 202 阅读 · 0 评论 -
数据结构-排序算法(2)
希尔排序希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,称为缩小增量排序基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减小,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止1、希尔排序时,对有序序列在插入时采用交换法2、希尔排序时,对有序序列在插入时采用移动法快速排序快速排序是对冒泡排序的一种改进基本思想:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有数据都比另外一部分的原创 2022-05-20 16:13:03 · 109 阅读 · 0 评论 -
数据结构-查找算法
java中,我们常用的查找有四种:1、顺序(线性)查找2、二分查找/折半查找3、插值查找4、斐波那契查找顺序查找二分查找二分查找思路分析:1、首先确定该数组的中间的下标mid = (left + right)/22、然后让需要查找的数findVal和arr[mid]比较2.1 findVal>arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找2.2 findVal<arr[mid],说明你要查找的数在mid的左边,因此需要递归的向左查找2.3 fi原创 2022-05-26 17:40:12 · 351 阅读 · 0 评论 -
数据结构-哈希表
基本介绍散列表也叫哈希表,是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表package hashtab;import java.util.Scanner;public class HashTabDemo { public static void main(String[] args) { //创建哈希表 HashTab原创 2022-05-27 20:42:50 · 47 阅读 · 0 评论 -
数组-链表-树存储方式
数组存储方式优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链式存储方式优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)缺点:在进行检索时,效率仍然较低(比如:检索某个值,需要从头节点开始遍历)树存储方式能提高数据存储,读取的效率,比如利用二叉排序树,既可以保证数据的检索速度,同时也可以保证数据的插入,删除,修改的速原创 2022-05-28 17:01:56 · 120 阅读 · 0 评论 -
数据结构-二叉树
二叉树原创 2022-06-13 20:01:30 · 111 阅读 · 0 评论 -
数据结构-赫夫曼树
赫夫曼编码原创 2022-06-27 20:34:00 · 622 阅读 · 0 评论 -
数据结构-二叉排序树
二叉排序树原创 2022-06-30 16:04:19 · 571 阅读 · 0 评论 -
数据结构-平衡二叉树
AVL树原创 2022-07-01 16:02:47 · 120 阅读 · 0 评论