数据结构
文章平均质量分 83
东风难破
这个作者很懒,什么都没留下…
展开
-
完全说明:环型队列长度如何计算
关于环型队列长度的计算一 说明队列长度计算公式二 为什么是顺时针移动而不是逆时针移动呢?一 说明队列长度计算公式参考:如何求循环队列的元素个数?假设数据只进入队列,而不出队列,即front=0,在原处,而rear在不断增加。此时显然,循环队列的元素个数为rear-front=rear-0 =rear, 如下图假设数据进入队列,有出队列,如下图此时要想得到队列长度,参考上面思想,我们可以把队列顺时针移动,使其front回归到front=0,此时rear的值就是队列长度。那么队列移动原创 2022-05-17 14:59:02 · 1842 阅读 · 1 评论 -
Java数据结构与算法(九)-程序员常用的10中算法
本章目录第14章 程序员常用的10中算法14.1 二分查找算法(非递归)14.1.1 二分查找算法(非递归)介绍14.2 分治算法14.2.1 分治算法介绍14.2.2 分治算法最佳实践-汉诺塔14.3 动态规划算法14.3.1 应用场景-背包问题14.3.2 动态规划算法介绍14.3.3 动态规划算法最佳实践-背包问题14.4 KMP算法14.4.1 应用场景-字符串匹配问题14.4.2 暴力匹配14.4.3 KMP 算法介绍14.4.4 KMP 算法最佳应用-字符串匹配问题14.5 贪心算法14.5.1原创 2021-06-24 20:07:41 · 324 阅读 · 1 评论 -
Java数据结构与算法(八)-多路查找树、图
本章目录第12章 多路查找树12.1 二叉树与B树12.1.1 二叉树的问题分析12.1.2 多叉树12.1.3 B树的基本介绍12.2 2-3树12.2.1 2-3 树介绍12.2.2 2-3树的应用案例12.2.3 其他说明12.3 B 树、B+树和 B*树12.3.1 B树的介绍12.3.2 B+树12.3.4 B*树第12章 多路查找树12.1 二叉树与B树12.1.1 二叉树的问题分析二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1 亿), 就原创 2021-06-18 22:10:26 · 264 阅读 · 0 评论 -
Java数据结构与算法(七)-树结构的实际应用
本章目录十一 树结构的实际应用11.1 堆排序11.1.1 堆排序的基本介绍11.1.2 堆排序基本思想11.1.3 堆排序图解说明11.1.4 堆排序的代码实现11.2 哈夫曼树11.2.1 基本介绍11.2.2 哈夫曼树集合重要概念11.2.3 赫夫曼树创建思路图解11.2.4 哈夫曼树创建的代码十一 树结构的实际应用11.1 堆排序11.1.1 堆排序的基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复 杂度均为 O(nlogn),它也是原创 2021-06-18 21:27:49 · 311 阅读 · 0 评论 -
Java数据结构与算法(六)-树
本章目录十 树10.1 二叉树10.1.1 为什么需要树这种数据结构10.1.2 树示意图10.1.3 二叉树的概念10.1.4 二叉树遍历十 树10.1 二叉树10.1.1 为什么需要树这种数据结构数组存储方式的分析**优点:**通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。**缺点:**如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低ArrayList中维护了一个object类型的数组elementData.所以它也是用数组来实现的。当添加原创 2021-06-10 10:30:11 · 101 阅读 · 1 评论 -
Java数据结构和算法(五)-查找算法、哈希表
本行目录八 查找算法8.1 查找算法介绍8.2 线性查找8.2.1 线性查找思路8.2.2 线性查找的实现8.3 二分查找8.3.1 二分查找思路8.3.2 二分查找的代码实现8.3.3 二分查找的应用8.4 插值查找8.4 1 插值查找原理8.4.2 插值查找的注意事项8.4.3 插值查找的代码实现8.5 斐波那契(黄金分割法)查找8.5.1 插值查找原理8.5.2斐波那契(黄金分割法)原理:8.5.3 斐波那契查找的实现八 查找算法8.1 查找算法介绍在 java 中,我们常用的查找有四种:(1原创 2021-06-08 15:21:54 · 274 阅读 · 0 评论 -
Java数据结构和算法(四)-排序算法(全)
本章标题七 排序7.1 排序分类7.2 算法时间复杂度7.2.1 度量一个程序(算法)执行时间的两种方法7.2.2 时间频度7.2.3 时间频度举例说明7.2.4 时间复杂度7.2.5 常见的时间复杂度7.2.6 平均时间复杂度和最坏时间复杂度7.3 算法的空间复杂度7.5 冒泡排序7.5.1 基本介绍7.5.2 冒泡排序的实现7.5.3 冒泡排序的优化7.6 选择排序7.6.1 基本介绍7.6.2 选择排序思路分析图7.6.3 选择排序的代码实现7.7 插入排序7.7.1插入排序法介绍:7.7.2插入排转载 2021-06-07 11:09:20 · 69 阅读 · 0 评论 -
Java数据结构和算法(三)-栈、递归
本章目录一 栈1.1 栈的一个实际需求1.2 栈的基本原理1.3 栈的应用场景1.4 用数组模拟栈1.5 栈实现综合计算器1.5.1. 思路分析1.5.2 代码实现(中缀表达式)1.6 前缀、中缀、后缀表达式1.6.1 基本原理1.6.2 逆波兰表达式实现计算器1.7 中缀表达式转后缀表达式1.7.1 中缀表达式转后缀表达式的步骤1.7.2 中缀表达式转后缀表达式的实现一 栈1.1 栈的一个实际需求请输入一个表达式计算式:[722-5+1-5+3-3] 点击计算1.2 栈的基本原理基本概念原创 2021-06-06 09:39:44 · 343 阅读 · 2 评论 -
Java数据结构和算法(二)-双链表与单项环型链表
本章标题一 双链表1.1 双向链表的操作与分析1.2 双向链表的代码实现二级目录三级目录一 双链表1.1 双向链表的操作与分析使用带head头的双向链表实现-水浒传英雄排行榜管理单向链表的缺点:(1)单向链表,查找方向只能是一个方向,而双向链表可以向前或者向后查找。(2)单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到 temp,temp 是待删除节点的前一个节点.双向链表遍历,添加,修改和删除(1)遍历 方和 单链表一样,只是原创 2021-06-04 10:01:16 · 82 阅读 · 3 评论 -
Java数据结构和算法(一)-稀疏矩阵、队列、单链表
这里写目录标题一 稀疏矩阵1.1 稀疏矩阵的基本内容1.2 应用场景举例1.3 实现思路1.4 代码实现二一 稀疏矩阵1.1 稀疏矩阵的基本内容当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。1.2 应用场景举例五子棋棋盘实例:1.3 实现思路创建一个原始的二维数组11*11;0:表示没有棋子,1:黑子;2:蓝子将二维数组转为稀疏矩阵(1)先遍历二维数组,得到非0数据的个数(2)创建对应的稀疏矩阵(3)给稀疏矩阵赋值将稀疏矩阵写入文件将稀疏原创 2021-06-03 09:42:06 · 516 阅读 · 2 评论 -
最短路径Dijkstra算法原理及Matlab实现
一 实现原理Dijkstra算法研究的是从初始点到其他每一结点的最短路径以下图为例,首先介绍Dijstra的原理红字为各结点的编号,蓝字为各结点之间的距离 首先定义几个变量 结点个数n; 二维矩阵M(nxn),距离矩阵,连通的结点间即为距离,不连通的结点间为正无穷,和自己的距离为0; 一维矩阵pb(1xn),若第i点已找到最短路径,则fp(i)=1,否则等于0,对于初始结点,fp=1; 距离矩阵d(1xn),若第i点已找到最短路径,则的d(i)=最短距离,否则为0,初始...原创 2020-10-26 16:53:03 · 5887 阅读 · 4 评论 -
数据结构相关知识总结-数据结构与算法图解(温格罗·袁志鹏)
第1章 数据结构为何重要1.1 基础数据结构:数组数组:含有数据的列表。索引从0开始。结论:时间复杂度=速度=效率=性能:其实都是步数,而不是时间。1.1.1 读取如果要查看索引2的值,计算机会直接跳到索引2,一步到位。1.1.2 查找一个N格数组,线性查找的最多步数是N。1.1.3 插入一个含有N个元素的数组,其插入数据最坏的情况会花费N+1步,即插入在数组开头,导致N此移动,加上一次插入。1.1.4 删除对于含有N个元素的数组,删除操作最多需要N步(1次删除,N-1次移动)1.2原创 2021-04-12 09:28:44 · 746 阅读 · 0 评论 -
数据结构-快速排序的原理、实现及效率分析
1. 快速排序的原理快速排序依赖分区。分区:从数组随机选取一个值,以其为轴,将比它小的值放到它的左边,比它大的值放到它的右边。以数组[0,5,2,1,6,3]升序排列为例:轴可以任选,我们选数组最右的值为轴。放置指针,它们应该分别指向排除轴元素的数组最左和最右的元素。接着就可以分区了,步骤如下。(1) 左指针逐个格子向右移动,当遇到大于或等于轴的值时,就停下来。(2) 右指针逐个格子向左移动,当遇到小于或等于轴的值时,就停下来。(3) 将两指针所指的值交换位置。(4) 重复上述步骤原创 2021-04-12 09:26:26 · 1422 阅读 · 0 评论 -
数据结构-插入排序的原理、实现及效率分析
1.插入排序的原理插入排序总共有四个步骤:取值-比较-平移-插入下面我们以[4,2,7,1,3]的升序排序为例,说明插入排序的实现过程。(1)第一轮,默认第一个元素有序,即从第二个元素开始操作。1)取值:取出第二个元素2放入temp中2)比较:将第一个元素4与2比较,4>23)平移:将4向右平移一个单位,4)插入:将2插入第一个位置。(2)第二论1)取值:取出第三个元素7放入temp中2)比较:将第二个元素4与7比较,4<7,不用进行步骤3及步骤4.(3)第三轮,1)原创 2021-04-11 14:07:31 · 1118 阅读 · 0 评论 -
数据结构-选择排序的原理、实现及效率分析
1. 选择排序的原理每次从未排序的元素中找到最大(或最小)的元素放在已排序的元素的末尾。以数组[4,22,7,1,3]为例。步骤1:找到最小的元素为1,4与1交换。得到[1,2,7,4.3]步骤2:找到最小的元素为2,不用交换。得到[1,2,7,4.3]步骤3:找到最小的元素为3,7与3交换。得到[1,2,3,4.7]步骤4:找到最小的元素为4,不用交换。得到[1,2,3,4.7]2. MATLAB实现sortarray=[4,2,7,1,3];[m,n]=size(sortar原创 2021-04-09 11:15:39 · 373 阅读 · 0 评论 -
数据结构-冒泡排序的原理、实现及效率分析
1.冒泡排序的原理每次轮回之后,未排序的值中最大的值(递增排序)都会“冒”到正确的位置上。2. 冒泡排序的MATLAB实现bubble.mfunction y=Bubble(x)% %冒泡算法:x_len=length(x); %度量数量长度,为排序做准备for i=1:x_len-1 %重复内循环,只是保证循环次数发生改变 for j=1:x_len-i原创 2021-04-08 11:05:39 · 725 阅读 · 0 评论