![](https://img-blog.csdnimg.cn/20210427223410393.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java数据结构与算法
文章平均质量分 87
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查
天问ㄆ
墨子,悟空,嫦娥,玉兔,九章,天问,鹊桥,广寒宫,北斗,鸿雁,鲲鹏,昆仑,萤火,夸父计划
展开
-
树结构相关算法
树结构相关算法树结构二叉树中序递归遍历二叉树中序递归遍历二叉树的深度二叉树广度优先遍历(BFS)二叉树深度优先遍历(DFS)参考文献 前记:二叉树的遍历有 前序遍历 中序遍历 后序遍历 深度优先搜索 宽度优先搜索 Morris(莫里斯)的前中后3种遍历方式 只要遇到二叉树相关的算法题,首先想到的就是上面的几种遍历方式,然后再稍加修改 补充:深度优先搜索策略可进一步区分为 先序遍历,中序遍历,后序遍历 树结构 public class TreeNode{ int val; TreeNode left;转载 2022-03-21 21:20:35 · 248 阅读 · 0 评论 -
Java数据结构与算法内容全链接
Java数据结构与算法内容全链接稀疏数组和队列单链表的实现双向链表 Josephu问题栈 中缀转后缀 后缀计算递归 迷宫 八皇后常见排序算法树结构之基础顺序存储二叉树 线索化二叉树树结构实际应用树结构实际应用2图结构及其遍历程序员常用的十大算法 稀疏数组和队列 二维数组转换为稀疏数组 稀疏数组转换为二维数组 数组模拟队列 数组模拟环形队列 直达链接:稀疏数组和队列 单链表的实现 单链表的添加和遍历 单链表的修改和删除 面试题 单链表有效结点的个数 单链表倒数第K个节点 单链表的反转 从尾到头打印单链表原创 2022-03-01 21:36:01 · 337 阅读 · 0 评论 -
程序员常用10种算法
程序员常用10种算法下篇普里姆算法应用场景---修路最小生成树算法介绍克鲁斯卡尔算法应用场景--公交站问题(最小生成树求解)算法介绍并查集克鲁斯卡尔代码迪杰斯特拉算法应用场景-最短路径问题算法介绍代码实现参考文献 普里姆算法 应用场景—修路 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 正确的思路,就是尽可能的选择少的转载 2022-03-05 11:51:24 · 1556 阅读 · 0 评论 -
程序员常用10种算法
程序员常用10种算法下下篇弗洛伊德算法应用场景-最短路径问题算法介绍代码实现马踏棋盘算法算法介绍思路分析代码实现参考文献 弗洛伊德算法 应用场景-最短路径问题 战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) , 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里 问:如何计算出 各村庄到 其它各村庄的最短距离? 算法介绍 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径 弗洛伊德算法 VS 迪转载 2022-03-05 18:05:49 · 472 阅读 · 0 评论 -
程序员常用 10 种算法
程序员常用 10 种算法二分查找算法(非递归)分治算法基本介绍基本步骤汉诺塔动态规划 二分查找算法(非递归) 代码实现: package com.atguigu.binarysearch; /** * @ClassName BinarySearchDemo * @Author Jeri * @Date 2022-02-28 20:39 * @Description 非递归的二分查找算法 */ public class BinarySearchDemo { /* * @Des转载 2022-03-04 16:11:27 · 986 阅读 · 0 评论 -
图结构及其遍历
图结构及其遍历图的基本介绍图的表示方式邻接矩阵邻接表深度优先遍历邻接矩阵实现广度优先遍历邻接矩阵实现参考文献 图的基本介绍 问题: 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图 基本概念: 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点 顶点(vertex) 边(edge) 路径 无向图 有向图 带权图 图的表示方式转载 2022-02-28 20:14:46 · 202 阅读 · 0 评论 -
树结构实际应用2
树结构实际应用二叉排序树二叉排序树创建和遍历平衡二叉(搜索)树 二叉排序树 需求 :给一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加 基本介绍: 二叉排序树 :BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应转载 2022-02-27 11:35:10 · 148 阅读 · 0 评论 -
树结构实际应用
树结构实际应用堆排序哈夫曼树哈夫曼编码哈夫曼解码参考文献 堆排序 基础概念: 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序 堆是具有以下性质的完全二叉树:注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 一般升序采用大顶堆,降序采用小顶堆 基本思想: 堆排序的基本思想: 将待排序序列转载 2022-02-26 16:00:05 · 226 阅读 · 0 评论 -
顺序存储二叉树 线索化二叉树
顺序存储二叉树 线索化二叉树顺序存储二叉树线索化二叉树中序线索化二叉树的构建中序线索化二叉树的中序遍历前序线索化二叉树的构建前序线索化二叉树的前序遍历后序线索化二叉树的构建后序线索化二叉树的后序遍历小结遍历参考文献 顺序存储二叉树 基本概念: 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组 要求: 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 7] 要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和转载 2022-02-23 19:54:17 · 227 阅读 · 0 评论 -
树结构之基础
树结构之基础 应用 查找树结构数组存储方式的分析链式存储方式的分析树存储方式的分析二叉树基本概念二叉树的遍历二叉树的查找二叉树的删除(规则1)二叉树的删除(规则2)参考文献 树结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。 缺点:在进行转载 2022-02-22 21:04:25 · 86 阅读 · 0 评论 -
查找算法 哈希表
查找算法 哈希表顺序 (线性) 查找二分查找插入查找斐波那契查找哈希表参考文献 顺序 (线性) 查找 代码实现: package com.atguigu.search; /** * @ClassName SeqSearchDemo * @Author Jeri * @Date 2022-02-21 11:40 * @Description 线性查找 */ public class SeqSearchDemo { /* * @Description 线性查找 * @D转载 2022-02-21 22:23:33 · 115 阅读 · 0 评论 -
常见排序算法
常见排序算法排序算法时间复杂度常见时间复杂度空间复杂度(了解)冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序 排序算法 基本概念 排序也称为排序算法(Sort Algorithm),排序是将一组数据,依给定的顺序进行排列的过程 分类: 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序 外部排序法:数据量过大,无法全部加载到内存中,需要借助**外部存储(文件等)**进行排序。 常见排序算法分类: 时间复杂度 时间频度:一个算法花费的时间与算法中语句的执行次数成正转载 2022-02-20 21:46:35 · 161 阅读 · 0 评论 -
递归 迷宫 八皇后
递归 迷宫 八皇后递归基本概念调用机制使用场景重要规则迷宫问题八皇后参考文献 递归 基本概念 递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于比那撑着解决复杂的问题,同时可以让代码变得简单 调用机制 打印问题思路分析: 递归调用规则: 当程序执行到一个方法时,就会开辟一个独立的空间 (栈) 每个空间的数据 (局部变量) ,是独立的;引用数据类型变量,是共享的 package com.atguigu.recursion; /** * @ClassName RecursionDemo转载 2022-02-17 23:12:18 · 131 阅读 · 0 评论 -
栈 中缀转后缀 后缀计算
栈 中缀转后缀 后缀计算基本概念应用场景数组模拟栈链表模拟栈栈实现计算器前缀 中缀 后缀表达式后缀表达式的计算机求值:中缀转换为后缀逆波兰计算器完整版参考文献 基本概念 栈 (stack):一个先入后出 (FILO-First In Last Out)的有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。约需插入和删除一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除转载 2022-02-16 23:40:23 · 222 阅读 · 0 评论 -
双向链表 Josephu问题
双向链表 约瑟夫问题 栈双向链表双向链表的操作分析代码实现约瑟夫问题问题分析代码实现栈基本概念应用场景数组模拟栈链表模拟栈栈实现计算器 双向链表 管理单向链表的缺点分析: 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到 temp,temp 是待删除节点的前一个节点(认真体会) 分析了双向链表如何完成遍历,添加,修改和删除的思路 双向链表的操作分析 对上图的说明: 遍历 双转载 2022-02-16 21:47:08 · 197 阅读 · 0 评论 -
单链表的实现
链表链表介绍单链表的添加和遍历单链表的修改和删除单链表面试题求单链表中有效结点的个数查找单链表中的倒数第 K 个节点单链表的反转从尾到头打印单链表参考文献 链表介绍 链表是有序的列表,在内存中的存储如下: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域,next 域:指向下一个节点 如图,链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单链表(带头结点)逻辑结构示意图如下: 单链表的添加和遍历 使用带 head 头的单向链表实现 – 水转载 2022-02-12 22:24:14 · 116 阅读 · 0 评论 -
稀疏数组和队列
稀疏数组和队列使用场景稀疏数组代码实现使用场景 使用场景 如何判断游戏的输赢,并可以完成存盘退出和继续上局的功能 存盘退出:棋盘 --> 二维数组 -->写入文件 继续上局:读取文件 --> 二维数组 --> 棋盘 分析问题: 该二维数组的很多值默认为零,因此记录了很多没有意义的数据,使用稀疏数组来解决 稀疏数组 基本概念:当一个数组中大部分元素为零时,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 从二维数组 到 稀疏数组: 记录数据一共有几行几列。有多少个不同的值转载 2022-02-08 10:11:26 · 79 阅读 · 0 评论 -
数据结构和算法概述
数据结构和算法概述提出问题授课方式数据结构和算法的关系数据结构组成参考资料 提出问题 字符串匹配,汉诺塔,八皇后问题,马踏棋盘算法 授课方式 数据结构和算法很重要,但是相对困难 采用 应用场景—数据结构或算法—剖析原理—分析实现步骤—代码实现 这五个步骤讲解 课程目标:掌握本质,达到在工作中灵活运用解决实际问题和优化程序的目的 数据结构和算法的关系 数据结构是一门研究组织数据方式的学习,学好数据结构,可以编写出更加漂亮,更加有效率的代码 学习好数据结构需要考虑如何将生活中遇到的问题 ,使用程序去实现解转载 2022-02-02 20:24:48 · 66 阅读 · 0 评论