数据结构及算法
文章平均质量分 77
从918起开始学习数据结构及算法课程,但愿少掉点头发;本专栏笔记是根据韩顺平老师笔记整理滴,希望对大家有帮助
指尖上的革新
我不懒,添加了简介
展开
-
韩顺平老师数据结构与算法学习笔记
目录数据结构与算法介绍课程的重要性,介绍了数据结构与算法的关系,分类等稀疏数组介绍什么是稀疏数组与相关应用队列介绍队列的实现,环形队列的实现链表介绍什么是链表;单向链表及双向链表实现及应用等单向环形链表约瑟夫问题介绍约瑟夫问题的处理方案栈介绍什么是栈,栈的应用,前中后缀表达式,逆波兰计算器等递归递归的介绍,递归解决实际问题:迷宫问题及八皇后问题等排序介绍了常用的几大排序:冒泡,选择,插入,希尔,快排,归并,基数排序等知识查找算法介绍常用的查找算法:二分查找,插值查找,斐波原创 2021-11-19 16:16:21 · 2085 阅读 · 2 评论 -
常用的十种算法
二分查找算法(非递归)前面我们讲过了二分查找算法,使用递归的方式,下面我们讲解二分查找算法的非递归方式二分查找法只适用于从有序的数列种进行查找(比如数字和字母等),将熟练排序后再进行查找二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步。假设从[0,99]的队列(100个数,即n=100)种寻找目标数30,则需要查找步数log2100,即最多需要查找7次(26<100<27)...原创 2021-11-26 23:15:11 · 1562 阅读 · 0 评论 -
图(graph)
图图基本介绍前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后续的关系树也只能由一个直接前驱也就是父节点当我们需要表示多对多的关系时,就需要用到图图是一种数据结构,其中节点可以具有零个或者多个相邻元素。两个结点之间连接称为边。结点也可以称为顶点有向图:顶点之间的连接有方向,比如A->B,只能A->B,不能是B->A带权图:这种边带权值的图也叫网。图的表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)邻接矩阵邻接矩阵是表示图形中顶原创 2021-11-26 10:04:36 · 990 阅读 · 1 评论 -
树(tree)
为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可以使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低操作示意图原创 2021-11-06 23:16:03 · 717 阅读 · 0 评论 -
哈希表(HashTable)
哈希表(HashTable)哈希表(hash table 也称散列表),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来记录访问,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表原创 2021-11-08 22:15:00 · 3067 阅读 · 0 评论 -
常用查找算法
查找算法介绍在java中,我们常用的查找有四种:1 顺序(线性)查找2 二分查找/折半查找3 插值查找4 斐波那契查找二分查找算法二分查找:请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在次数,并且求出下标,如果没有就提示“没有这个数”二分查找思路1 先确定数组中间下标 mid = (left+right)/22 然后让需要查找的数findVal和arr[mid]比较2.1 如果findVal>arr[mid],说明需要查找原创 2021-11-02 20:55:31 · 353 阅读 · 0 评论 -
排序(Sort)
排序排序也称排序算法 ( Algorithm)排序是将一组数据,依指定的顺序进行排列的过程。原创 2021-10-18 22:52:45 · 2962 阅读 · 0 评论 -
递归(recursion)
递归递归就是一个方法自己调用自己递归适用场景各种数学问题:八皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等将用栈解决的问题用递归实现代码比较简洁递归需要遵守的重要规则执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响,比如n变量如果方法中使用的是引用类型变量(如数组),就会共享该引用类型的数据递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflow原创 2021-10-16 22:53:55 · 549 阅读 · 0 评论 -
栈(stack)
栈的简介栈(stack)栈是一个先入后出(FILO-first in last out)的有序列表。栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈低(bottom)根据栈的定义可知,最先放入栈中元素在栈低,最后放入元素宅栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆中,直到子程序执行完后再将地址取原创 2021-10-11 20:39:01 · 1979 阅读 · 0 评论 -
单向环形链表之约瑟夫问题
单向环形链表应用场景(Josephu)约瑟夫问题:设置编号为1、2、3…n的n个人围坐在一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到的吗的那个人出列,它下一位又从1开始报数,数到m那个人又出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列,由此产生一个出队编号的序列提示:用一个不带头节点环形链表来处理Josephu问题;先构成一个有n个节点的单循环链表,然后由k节点起从1开始计数,计到m时,对节点从链表中删除,然后再从被删除的节点的下一个节点开始又原创 2021-10-11 20:36:53 · 346 阅读 · 0 评论 -
链表(linked list)
1 链表介绍链表是有序的列表,但是它在内存中是存储如图小结:链表是以节点方式来存储每个接地那包含data域,next域:next域指向下一个节点如图:链表各个节点不一定是连续存储的链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定...原创 2021-09-23 22:27:52 · 1047 阅读 · 0 评论 -
队列(queue)
1 队列介绍队列是一个有序列表,可以是数组或是链表来实现遵循先入先出的原则。即先存入队列的数据,要先取出。后存入的要后取出示意图原创 2021-09-22 23:31:48 · 1437 阅读 · 0 评论 -
稀疏数组(sparsearray)
稀疏数组基本介绍当一个数组中大部分元素为0或者为同一个值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方法:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模实际需求编写五子棋程序中,有存盘退出和续上盘的功能分析问题因为该二维数组的很多值是默认值0,因此记录很多没有意义的数据,可以考虑稀疏数组举例说明图解转换二者转换思路总结二维数组 转 稀疏数组的思路1 遍历原始的二维数组,得到有效数组的个数sum原创 2021-09-21 00:13:11 · 402 阅读 · 0 评论 -
数据结构与算法
数据结构和算法内容介绍数据结构和算法的重要性算法是程序的灵魂,优秀的程序可以在海里数据计算时,依然保持高速计算一般来讲程序会使用了内存计算框架(如:Spark)和缓存技术(如:redis)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核心功能是哪个部分呢?目前程序员面试的门口越来越高,很多一线IT公司,都会有数据结构和算法的面试题如果你不想永远都是CRUD代码工人,那就花时间来了解下数据库结构和算法数据结构和算法的概述数据结构和算法的关系数据(data)结构(structu原创 2021-09-20 00:25:51 · 408 阅读 · 0 评论