![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构个人学习
该栏为作者学习尚硅谷网课并参考网上博文所总结。
承蒙*
立志成为一个java大佬!
展开
-
菜鸟笔记之数据结构(26)
数据结构与算法—常用十种算法10马踏棋盘算法(骑士周游问题)声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。马踏棋盘算法(骑士周游问题)介绍--------------------------------------- 个人学习笔记----------------------------------------...原创 2020-11-10 16:21:20 · 151 阅读 · 0 评论 -
菜鸟笔记之数据结构(25)
数据结构与算法—常用十种算法9弗洛伊德(Floyd)算法声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。弗洛伊德(Floyd)算法算法介绍和迪杰斯特拉(Dijkstra)算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。Dijkstra算法用于计算图中某一个顶点到其他顶点的最短路径,而Floyd算法是计算图中各个顶点之间的最短路径。Dijkstra算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;Floy原创 2020-11-10 10:49:52 · 171 阅读 · 0 评论 -
菜鸟笔记之数据结构(24)
数据结构与算法—常用十种算法8迪杰斯特拉(Dijkstra)算法声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。迪杰斯特拉(Dijkstra)算法应用场景-最短路径问题算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层扩展(广度优先搜索思想),知道扩展到终点为止。算法过程图解参考该文章 Dijkstra算法(三)之 Java详解代码import java.util.A原创 2020-11-09 20:32:50 · 121 阅读 · 0 评论 -
菜鸟笔记之数据结构(23)
数据结构与算法—常用十种算法7克鲁斯卡尔算法(Kruskal)声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。克鲁斯卡尔算法(Kruskal)应用场景-公交站问题算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从大到小的顺序选择n-1条边,并保证这n-1条边不构成回路。具体做法:首先构造一个只含n个顶点的森林,然后按权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止 。原创 2020-11-09 16:11:57 · 167 阅读 · 0 评论 -
菜鸟笔记之数据结构(22)
数据结构与算法—常用十种算法6普利姆算法(Prim)声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。普利姆算法(Prim)应用场景-修路问题思路: 修路问题的本质就是最小生成树的问题,最小生成树(Minimum Cost Spanning Tree),简称MST。给定一个带权的无向连通图,如何选取一颗生成树,使树上的所有边上权的总和为最小,这叫最小生成树。N个顶点,一定有N-1条边。包含全部顶点。N-1条边都在图中。求最小生成树的算法主要是普利姆算法原创 2020-11-06 12:21:44 · 221 阅读 · 2 评论 -
菜鸟笔记之数据结构(21)
数据结构与算法—常用十种算法5贪心算法声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。贪心算法应用场景-集合覆盖问题贪心算法介绍贪心算法(也叫贪婪算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。思路分析如何找出能覆盖所有地区的广播台的集合,如果使用穷举法实现,列出每个可能的广播台原创 2020-11-05 16:55:16 · 113 阅读 · 0 评论 -
菜鸟笔记之数据结构(20)
数据结构与算法—常用十种算法4暴力匹配算法KMP算法声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。应用场景字符串匹配问题:有一个字符串str1 = “硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好”,和一个子串str2 = “尚硅谷你尚硅你”。现在要判断str1是否含有str2,如果存在,就返回第一次出现的位置,如果没有就返回-1。暴力匹配算法如果用暴力匹配的思路,并假设在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:如果当前字符匹原创 2020-11-05 11:10:48 · 102 阅读 · 0 评论 -
菜鸟笔记之数据结构(19)
数据结构与算法—常用十种算法3动态规划算法声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。动态规划算法应用场景:背包问题动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划算法与分治算法类似,基本思想也是将待求解问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治算法不同的是,适合用动态规划解决的问题,经分解得到子问题往往不是原创 2020-11-04 16:51:10 · 152 阅读 · 1 评论 -
菜鸟笔记之数据结构(18)
数据结构与算法—常用十种算法2分治算法分治算法最佳实践-汉诺塔声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。分治算法介绍:分治算法是一种很重要的算法。就是 把一个复杂的问题分成两个或更多的相同或者相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并 。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)。分治算法可以求解经典的问题:二分搜索,大整数乘法,棋盘覆盖,合并原创 2020-11-03 16:46:21 · 94 阅读 · 0 评论 -
菜鸟笔记之数据结构(17)
数据结构与算法—常用十种算法1二分查找算法(非递归)声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。二分查找算法(非递归)特点:前面学过的二分查找是使用递归的方式,此处的二分查找是使用的非递归的方式。二分查找法 只适用于有序的数列 中进行查找(比如数字和字母等),将数列排序后再进行查找。二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步,假设从[0,99]的队列(100个数)中寻找目标数30,则需要查找步数为log2原创 2020-11-03 15:20:35 · 76 阅读 · 0 评论 -
菜鸟笔记之数据结构(16)
数据结构与算法—图2图的遍历深度优先遍历广度优先遍历应用实例声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。图的遍历所谓图的遍历,即对结点的访问,一个图有很多的结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:(1)深度优先遍历(2)广度优先遍历。深度优先遍历图的深度优先搜索(Depth First Search,DFS)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问原创 2020-10-30 22:13:35 · 98 阅读 · 0 评论 -
菜鸟笔记之数据结构(15)
数据结构与算法—图1图的基本介绍图的表示方式邻接矩阵邻接表图的创建声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。图的基本介绍线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时,这里我们就用到了图 。图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边,结点也可以叫做顶点。顶点: A,B,C,D,E就称为顶点。边: A-B,B-C,B-D等称为边。无向图: 顶点之间的连接原创 2020-10-30 12:25:05 · 112 阅读 · 0 评论 -
菜鸟笔记之数据结构(14)
数据结构与算法—树6多叉树B树、B+树和B*树B树B+树B*树声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。前言: 二叉树的操作效率高,但是也存在问题。二叉树需要加载到内存的,如果二叉树的节点少,没什么问题但是如果二叉树的节点很多(比如1亿),就存在如下问题:在构建二叉树时,需要进行多次i/o操作(海量数据存在数据库或文件中)。节点海量,构建二叉树时,对速度有影响。节点海量,也会造成二叉树的高度很大,会降低操作速度。多叉树在二叉树中,每个节点有数据项,原创 2020-10-29 13:11:40 · 80 阅读 · 0 评论 -
菜鸟笔记之数据结构(13)
数据结构与算法—树5平衡二叉树平衡二叉树的构建子树高度的获取二叉排序树转为平衡二叉树声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。平衡二叉树又叫平衡二叉搜索树,AVL树。是在二叉排序树基础上的,可以保证查询效率较高,解决二叉排序树单支的情况(类似单链表)查询速度慢的问题。特点:它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。如上图所示,A原创 2020-10-28 22:37:14 · 86 阅读 · 0 评论 -
菜鸟笔记之数据结构(12)
数据结构与算法—树4二叉排序树概念二叉排序树的创建、遍历和删除声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。二叉排序树概念Binary Sort Tree,对于二叉排序树的任何一个非叶子结点,要求左子结点的值比当前结点值小,右子节点的值比当前结点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。二叉排序树的创建、遍历和删除public class BinarySortTreeDemo { public static void main(Strin原创 2020-10-28 15:05:51 · 137 阅读 · 1 评论 -
菜鸟笔记之数据结构(11)
数据结构与算法—树3赫夫曼树赫夫曼编码声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。赫夫曼树概念:给定n个权值作为n个叶子节点,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的树为最优二叉树,也叫赫夫曼树(哈夫曼树)。它是带权路径长度最短的树,权值较大的结点离根较近。名词解释:路径:一棵树中,从一个结点往下可以达到的子节点,或孙子节点的通路,称为路径。路径长度:通路中分支的数目称为路径长度,根节点到第L层结点的路径长度为 L-1 。权:树中结点的值原创 2020-10-27 21:09:54 · 167 阅读 · 0 评论 -
菜鸟笔记之数据结构(10)
数据结构与算法—树2顺序存储二叉树线索化二叉树声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。顺序存储二叉树概念:指的是使用顺序表(数组)存储二叉树。需要注意的是,顺序存储只适用于完全二叉树,换句话说,只有完全二叉树才可以使用顺序表存储。数组存储方式和树的存储方式可以相互转换。 如下:特点:第n个元素的左子结点为2n+1;第n个元素的右子结点为2n+2;第n个元素的父结点为(n-1) / 2;n表示二叉树中第n个元素(按0开始编号)。例如:给你一个原创 2020-10-27 11:52:55 · 131 阅读 · 1 评论 -
菜鸟笔记之数据结构(9)
数据结构与算法—树1树的介绍二叉树前序、中序、后序遍历前序、中序、后序查找节点的删除声明:以下是学的尚硅谷网课并结合网上资料所记的笔记。可能会有一些错误,发现了会修改。树的介绍概念树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。注:原创 2020-10-26 17:04:30 · 91 阅读 · 0 评论 -
菜鸟笔记之数据结构(8)
数据结构与算法—哈希表也叫散列表,是根据关键码值而直接进行访问的数据结构。通过关键码值映射到表中的一个位置来访问记录,以加快查找速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表。散列表是数组+链表实现的。哈希表实现步骤整个过程其实只有两步:存储时,通过哈希函数计算记录的哈希地址,并按此地址存储该记录。查找记录时,同样通过哈希函数计算记录的散列地址,按此散列地址访问该记录。哈希函数可以用除留余数法:添加位置的地址下标 = 关键字 / 数组的大小。哈希冲突对不同的关键字可原创 2020-10-22 18:35:13 · 93 阅读 · 0 评论 -
菜鸟笔记之数据结构(7)
数据结构与算法—查找算法线性查找二分查找插值查找斐波那契查找声明:以下都是学的尚硅谷网课所记的笔记。可能会有一些错误,发现了会修改。查找算法主要有顺序查找(线性查找),二分查找(折半查找),插值查找和斐波那契查找。线性查找顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。对于任意一个序列和一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查原创 2020-10-22 12:31:59 · 88 阅读 · 0 评论 -
菜鸟笔记之数据结构(6)
数据结构与算法—排序算法(2)冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序堆排序声明:以下都是学的尚硅谷网课所记的笔记。冒泡排序原理: 对待排序序列从前往后(从下标较小的元素开始),依次比较相邻元素的值,如果逆序则交换,使得值较大的元素逐渐从前往后移,就像水泡一样逐渐往上冒。规则:一共需要进行数组的大小减1次循环;每一趟需要排序的次数逐渐减小;优化: 如果发现某趟排序中,没有发生一次交换,则可以提前结束冒泡排序。//只列出关键代码int temp = 0;boolean原创 2020-10-13 16:22:48 · 107 阅读 · 1 评论 -
菜鸟笔记之数据结构(5)
数据结构与算法—排序算法(1)排序算法算法的时间复杂度声明:以下都是学的尚硅谷网课所记的笔记。排序算法排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。 排序算法的基本分类如下图所示。算法的时间复杂度算法的时间复杂度用以度量程序或算法的执行时间,有事后统计和事前估算的方法,通常会先对程序采用事前估算的方法计算。时间频度: 算法花费的时间和算法中语句的执行次数成正比。一个算法中语句的执行频次称为语句频度或时间频度。时间复杂度的计算:算法中基本操作语句的重复执行次数是原创 2020-10-12 16:13:30 · 72 阅读 · 0 评论 -
菜鸟笔记之数据结构(4)
数据结构与算法—栈栈的介绍前缀、中缀、后缀表达式递归声明:以下都是学的尚硅谷网课所记的笔记。栈的介绍stack: 先入后出的有序列表(FILO),栈限制线性表中元素的插入和删除只能在线性表的 同一端 进行的一种特殊线性表,允许插入和删除的一端为变化的一端,称为栈顶,另一端为固定的一端,称为栈底。入栈(push),出栈(pop)。应用场景:子程序调用:跳往子程序前,将下个指令地址存到堆栈中,当子程序执行完再将地址取出,回到原程序,处理递归调用。表达式的转换和求值。中缀表达式转后缀表达式。二叉树原创 2020-10-11 11:11:06 · 90 阅读 · 0 评论 -
菜鸟笔记之数据结构(3)
数据结构与算法—链表单链表特点往链表的指定位置插入节点面试题新浪面试题腾讯面试题百度面试题双链表特点单向环形链表(无头节点)声明:以下都是学的尚硅谷网课所记的笔记。单链表单链表:是有序的列表,但在内存中的存储不是连续的。特点链表以节点方式存储;每个节点有data域,next域,分别存放数据和下一个节点地址;各节点在内存中不一定连续存放;链表分为带头节点和不带头节点的链表。单链表的结构图如下:每一个节点都是自己编写的类对象,类中包含数据和下一个节点信息(即地址)。往链表的指定位置原创 2020-10-10 13:37:02 · 110 阅读 · 0 评论 -
菜鸟笔记之数据结构(2)
数据结构与算法—队列特点数组模拟队列优化思路特点队列是一个有序列表,可以用数组和链表实现;先入先出(FIFO原则);队首(front)取元素,队尾(rear)放元素。数组模拟队列需要两个变量front(随数据的输出变化)和rear(随数据存入变化)分别记录队列的前后端下标,front和rear初始化为-1;front == rear -> 表示空,队列中没有元素,不能取数据;rear = maxSize - 1 -> 表示队列满了,不能存数据。优化思路上边的数组模拟队原创 2020-10-10 10:56:14 · 92 阅读 · 0 评论 -
菜鸟笔记之数据结构(1)
数据结构与算法—笔记1简要数据结构的分类稀疏数组简要数据结构是一门研究组织数据方式的学科,学好数据结构可以写出更漂亮、更有效率的代码。数据结构的分类线性结构:数组,队列,链表,栈。数据之间有一对一的线性关系,有顺序存储和链式存储两种存储结构。非线性结构:二维数组(多维),广义表,树,图。稀疏数组作用:压缩二维数组,当一个数组中数据大部分为0或者为同一数值的数组,可用稀疏数组来保存该数组。实现:记录数组一共几行几列,有多少不同的值;然后把具有不同的值的元素的行列和值放在一个小规模的数组中原创 2020-10-06 22:14:48 · 172 阅读 · 0 评论