![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 73
长梦。
这个作者很懒,什么都没留下…
展开
-
数据结构与算法(程序员常用的十种算法:上1~5)
一:二分查找二:分治算法三:动态规划四:KMP算法五:贪婪算法原创 2021-12-28 22:01:27 · 4127 阅读 · 1 评论 -
数据结构与算法(多路查找树B树,B+树)
二叉树与B树二叉树的问题分析二叉树的操作效率较高,但是也存在问题,请看下面的二叉树1)二叉树需要加载到内存的,如果二叉树的节点少,没有什么间题,但是如果二叉树的节点很多(比如1亿)、就存在如下间题2)间题1。在构建二叉树时,需要多次进行/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响3)同题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.多叉树1)在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,..原创 2021-12-10 19:57:09 · 230 阅读 · 0 评论 -
数据结构与算法(二叉排序树BST,平衡二叉树AVL)
先看一个需求给你一个数列(7,3,10,12,5,1,9),要求能够高效的完成对数据的查询和添加使用数组数组未排序,优点:直接在数组尾添加,速度快。缺点:查找速度慢.[示意图]数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。[示意图]使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。[示意图]使用二叉排序树二叉排序树介绍 二叉排序树:...原创 2021-12-07 23:07:15 · 340 阅读 · 0 评论 -
数据结构与算法(赫夫曼树,赫夫曼编码)
赫夫曼树基本介绍:(1)给定n个权值作为n给叶子节点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树(HuffmanTree),还有的树翻译为霍夫曼树.(2)赫夫曼树是带权路径长度最短的树,权值较大的节点离根较近.赫夫曼树几个重要概念和举例说明:(1)路径和路径长度,在一颗树中,从一个节点往下可以达到的孩子或孙子节点之间的通路,称为路径.通路中分支的数目称为路径长度,若规定根节点的层数为1,则从根节点到第L层的节点路径长度为L-1(2原创 2021-12-04 23:26:11 · 971 阅读 · 0 评论 -
数据结构与算法(树结构实际应用,堆排序)
堆排序基本介绍(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序.(2)堆是具有以下性质的完全二叉树,每个结点的值都大于或者等于其左右孩子节点的值,称为大顶堆,注意:没有要求节点的左孩子的值和右孩子的值的大小关系.(3)每个节点的值都小于或者等于其左右孩子节点的值,称为小顶堆(4)大顶堆举例说明我们堆堆中的节点按层进行编号,映射到数组中介绍下面这样子大顶堆特点:arr[i..原创 2021-11-30 18:14:05 · 565 阅读 · 0 评论 -
数据结构与算法(数,二叉树)
二叉树为什么需要数这种数据结构(1)数组存储方式的分析优点:通过下标方式访问元素,速度快.对于有序数组,还可以使用二分查找提高检索速度.缺点:如果要检索具体某个值,或者插入值(按一定顺序)会移动整体,效率较低操作示意图:(2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,连接到链表中即可,删除效率也很好).缺点:进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)操作示意图:(3)..原创 2021-11-26 21:23:15 · 304 阅读 · 0 评论 -
数据结构与算法(哈希表)
哈希表(散列)Google上机题1看一个实际需求,google公司的一个上机题2有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当输入该员工的id时,要求查找到该员工的所有信息.3.要求.不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找速度,原创 2021-11-21 23:28:47 · 163 阅读 · 1 评论 -
数据结构与算法(查找算法:线性,二分,插值,斐波那契 )
查找算法介绍在java中,我们常用的查找有四种:1.顺序(线性)查找2.二分查找/折半查找3.插值查找4.斐波那契查找线性查找有一个数列:{1,8,10,89,1000,1234},判断数列中是否包含此名称[顺序查找]要求:如果找到了,就提示找到了,并给出下标值.代码实现:package search;/** * 线性查找 */public class SeqSearch { public static void main(String[] a原创 2021-11-19 19:33:37 · 427 阅读 · 0 评论 -
数据结构与算法(桶排序 排序算法的时间复杂度比较)
基数排序(桶排序)介绍:(1)基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些"桶"中,达到排序的作用(2)基数排序法是属于稳定性的排序,基数排序法是效率高的稳定性排序法(3)基数排序(Radix Sort)是桶排序的扩展(4)基数排序是1887年赫尔曼.何乐礼发明的.它是这样实现的:将整数按位数切割成不同的数字,然后按每个位.原创 2021-11-16 23:48:24 · 1062 阅读 · 0 评论 -
数据结构与算法(栈)
2栈2.1栈的介绍 栈是限制插入和删除只能在一个位置是进行的线性表.其中,允许插入和删除的一端位于表的末端,叫栈顶(top),不允许插入和删除的另一端叫栈低(bottom).对栈的基本操作有PUSH(压栈)和POP(出栈),前者相当于表的插入操作(向栈顶插入一个元素),后者则是删除操作(删除一个栈顶元素).栈是一种后进先出(LIFO)的数据结构,最先被删除的是最近压栈的元素.2.2栈的应用场景2.3栈的快速入门2.4栈实现计算器2.4.1ArraySt...原创 2021-10-09 15:53:19 · 502 阅读 · 0 评论 -
数据结构与算法(稀疏数组)
3.链表3.1链表(Linked List)介绍链表是一种物理存储单元上非连续,非顺序的储存结构,数据元素的逻辑顺序是通过链表中指针链接实现的.原创 2021-10-13 18:00:16 · 67 阅读 · 0 评论 -
数据结构与算法(前缀,中缀,后缀表达式(逆波兰表达式)
前缀表达式(波兰表达式)1前缀表达式又称为波兰式,前缀表达式的运算符位于操作数之前2举例说明:(3+4)×5-6对应的前缀表达式计算- × + 3 4 5 6前缀表达式的计算机求值从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈,重复上述过程,直到表达式最左端,最后运算得出的只即为表达式的结果例如:(3+4)*5-6对应的前缀表达式就是-*+3456,针对前缀表达式求值步骤如下:1:从右至.原创 2021-11-01 11:58:25 · 3922 阅读 · 1 评论 -
数据结构和算法(递归)
递归的概念 简单的说: 递归计算方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁.递归的调用机制我列举了两个小案例,来帮大家理解递归,下载让大家看一下递归的调用机制1:打印问题2:阶乘问题3使用图解的方式说明了递归的调用机制代码演示:package recursion;public class RecursionTest { public static void main(String...原创 2021-11-02 21:23:53 · 155 阅读 · 0 评论 -
数据结果与算法(排序算法 ,时间复杂度,空间复杂度)
排序算法的介绍排序也称排序算法 (Sort Algorithm),排序是将一组数据,依指定顺序进行排序的过程。排序的分类:(1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。(2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部储存进行排序(3)常见的排序算法分类(如图)算法的时间复杂度度量一个程序(算法)执行时间的两种方法(1)事后统计的方法这种方法可行,但是有两个问题: 一:是想要对设计的算法的运行性能进行...原创 2021-11-04 22:51:32 · 223 阅读 · 2 评论 -
数据结构与算法(双向链表)
双向链表的操作和实现使用带head头的双向链表实现-----水浒传英雄排行榜管理单向链表的缺点分析1:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后去查找2:单项链表不能自我删除,需要依靠辅助节点,而双向链表,则可以自我删除,所以前面我们单项链表删除节点时,总是要找到temp.temp(是待删除节点的前一个节点)3示意图帮助理解删除对上图的说明:分析双向链表的遍历,添加,修改,删除的操作思路====>代码实现1:遍历方法和单链表一样,只是可以..原创 2021-10-27 20:39:50 · 96 阅读 · 1 评论 -
数据结构与算法(单链表)
链表(Linked List)介绍链表是一个有序的链表,但是他在内存中是储存如下原创 2021-10-26 16:05:47 · 446 阅读 · 3 评论 -
数据结构与算法(单向环形链表 约瑟夫环)
单向环形链表应用场景Josephu(约瑟夫,约瑟夫环)问题Joseph 问题为:设编号为1,2,3,....n的n个人围坐一圈,约定编号为 k (1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列.提示:用一个不带头节点的循环链表来处理Josephu 问题:先构成一个有n个节点的单循环链表,然后由k节点开始计数,记到m时,对应节点从链表中删除,然后再从被删除节点的下一个节点又.原创 2021-10-28 12:08:39 · 171 阅读 · 1 评论 -
数据结构与算法(插入排序,希尔排序)
插入排序介绍:插入式排序属于内部排序法,是对于欲排序元素以插入的方式寻找该元素适当的位置,已达到排序的目的.插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序和无序表,开始时有序表只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中适当位置,使之成为新的有序表.插入排序思路图:从小到大演示插入排序应用案例:有一群小牛,.原创 2021-11-11 23:36:10 · 667 阅读 · 1 评论 -
数据结构与算法(冒泡排序,选择排序)
冒泡排序基本介绍冒泡排序(Bubble Sorting)的基本思想是,通过对待排序序列从前向后(从下标较小的元素开始),依次对比相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移动向后部,就象水底的气泡一样逐渐向上冒.因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换.从而减少不必要的比较.(这里说的优化,可以在冒泡排序写好,在进行)冒泡排序的应用案例我们举一个具体的案例来说明冒原创 2021-11-06 21:35:12 · 184 阅读 · 5 评论 -
数据结构与算法(队列)
队列介绍队列是一个有序列表,可以用数组或者是链表来实现遵循先入先出的原则. 即:先入队列的数据,要先取出.后存入的后取出示意图:(使用数组模拟队列示意图)数组模拟队列队列本身是有序列表,若使用数组的结构来储存队列的数据,则队列数组的生命如下图,其中maxSize是该队列的最大容量因为队列的输出,输入分别是从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,fornt会随着数据输出而改变,而rear则是随着数据输入而改变.如图所示:当我们将数.原创 2021-10-20 21:14:56 · 76 阅读 · 0 评论 -
数据结构与算法(快速排序,归并排序)
快速排序法介绍:快速排序Quicksort)是对冒泡排序的一种改进.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程都可以递归进行,以此达到整个数据变成有序序列.快速排序法示意图:快速排序法思路分析排序算法的应用实例:要求:对[-9,78,0,23,-567,70]进行从小到大的排序,要求使用快速排序法。说明:【验证分析】如果取消左右递归,结果..原创 2021-11-12 22:29:38 · 106 阅读 · 0 评论