Java数据结构与算法
文章平均质量分 90
我爱布朗熊
目前是个学生,仍然在学习阶段
展开
-
数据结构与算法——赫夫曼树基本实现
最优二叉树:也称哈夫曼树或者霍夫曼树、赫夫曼树,给定n个权值作为n个叶子结点(每个叶子结点会有权值),构造一颗二叉树,若该树的带权路径长度(wpl)达到最小带权路径长度最短的树,权值较大的结点离根较进。(值都在叶子结点上)路径:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路路径长度:通路中分支的数目若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1下图中,根结点到第三层的路径长度都是3-1=2。原创 2023-04-05 22:14:15 · 3013 阅读 · 0 评论 -
树结构应用——堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,成为大顶堆每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆对左右孩子结点的值大小的比对并没有做要求一般升序采用大顶堆,降序采用小顶堆。原创 2023-04-03 21:51:07 · 319 阅读 · 0 评论 -
数据结构与算法——二叉树遍历、查找、删除、顺序存储二叉树、线索化二叉树
n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索"公式来历:一共有n个结点,一个结点有2个指针,n个结点有2n个指针;n个结点的话会占用n-1个指针,则还剩下2n-(n-1)个空指针域这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,原创 2023-03-22 21:58:24 · 957 阅读 · 0 评论 -
数据结构——哈希表
哈希表是属于一个数据结构,并不是一个算法哈希表:hashtable,也叫散列表,根据关键码值(Key value)而直接进行访问的数据结构。通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射的函数叫做散列函数(柑橘关键码值能迅速的定位表中位置的方法),存放记录的数组叫做散列表。当有新员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址....),当输入该员工的id时,要求查找到该员工的所有信息不使用数据库,尽量节省内存,越快越好对于这种需求和要求,我们就可以。原创 2023-03-09 14:23:49 · 1784 阅读 · 0 评论 -
数据结构与算法——Java实现查找算法—斐波那契查找、插值查找、线性查找
注意, 此时斐波那契数列是存放在数组中的, 所以会用F[]表示, 一定要注意跟F()的不同, 比如: F[6] =13 = F(7), F[0] = 1 = F(1)与二分查找法、插值查找法相似,仅仅改变了中间节点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近。斐波那契数列{1,1,2,3,5,8,13,21,34,55}发现斐波那契数列的。, 说明你要查找的数在mid 的右边, 因此需要递归的向右查找。, 说明你要查找的数在mid 的左边, 因此需要递归的向左查找。原创 2023-03-08 23:49:59 · 640 阅读 · 0 评论 -
数据结构与算法——Java实现排序算法(二)
为了解决直接插入排序所带来的弊端,我们接来下看一下希尔排序 希尔排序也是一种插入排序,简单插入排序经过改进之后的另一个更高效的版本,也成为了缩小增量排序希尔排序是把记录按下标的一定增量分组(分组并没有按照顺序),对每组使用直接插入排序算法排序随着增量逐渐减少,每组包含的关键词越来越多,当增量减到1时,整个文件恰被分到一组,算法便终止很多人会想,那上面的数量刚好是凑好的,那要是凑不好怎么办呢? 我们看一下下面的数据,第一组中的数据有三个,其他组的数据有两个,不过也不耽误我们的运行 就是相当原创 2022-12-24 22:12:50 · 465 阅读 · 2 评论 -
数据结构与算法——Java实现排序算法(一)
将一组数据,依指定的顺序进行排列的过程。将需要处理的所有数据都加载到内部储存器中进行排序数据量过大,无法全部加载到内存,需要借助外部存储进行排序。先加载一部分排序,完成之后再加载一部分排序合并。常见的排序算法。原创 2022-12-18 22:51:44 · 474 阅读 · 0 评论 -
数据结构与算法——Java实现递归、迷宫回溯问题、八皇后问题
八皇后问题:是回溯算法的基本案例。在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行、同一列或同一斜线,问有几种摆法答案是92种。原创 2022-12-16 12:36:05 · 708 阅读 · 0 评论 -
数据结构与算法——Java实现栈、逆波兰计算器(整数加减乘除)
我们平时使用的计算器,其底层就是利用了栈这个概念对这个算式进行理解栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表(stack)是限制表素的插入和除只能在性的同一端进行的一种性表。允许插入和删除的端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除图解方式说明。原创 2022-12-15 12:32:04 · 1774 阅读 · 0 评论 -
数据结构与算法——Java实现单链表、双向链表、环型链表、约瑟夫
我们看下面的图示如下图链表是以节点的方法来存储,是链式存储每个节点包含data域(存放数据),next域(指向下一个节点)链表各个节点不一定是连续存储的链表分带头节点的链表(头结点不存放数据)和不带头结点的链表,根据实际需求来确定下图是带头节点的链表,其中每一个白色的矩形就是一个节点。原创 2022-12-13 21:24:12 · 796 阅读 · 0 评论 -
数据结构与算法——Java实现稀疏数组和队列
当一个数组中大部分元素是0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组记录数组一共几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模我们看看下面的图,看看稀疏数组到底是怎么回事如果我们使用左侧的的二维数组直接记录,我们会有6*7=42个数据。我们看一下右侧的稀疏数组,一打眼就没有42个数据。变成了九行三列9*3=27个数据稀疏数组是怎么表示的呢?表头是行、列、值(利用行、列就可以确定具体的位置,初中的平面坐标系)原创 2022-12-12 20:47:37 · 517 阅读 · 0 评论