Java数据结构与算法
文章平均质量分 69
Java数据结构与算法
毕竟尹稳健
凸头小白
展开
-
Java实现哈希表(散列)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。原创 2022-09-24 13:32:44 · 672 阅读 · 0 评论 -
Java实现二分查找、插值查找(遍历查找,递归查找)
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。插值查找在二分查找进行优化,记住公式就行。原创 2022-09-23 10:46:09 · 686 阅读 · 0 评论 -
Java实现常用的排序算法(快速排序、归并排序、基数排序)
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。原创 2022-09-13 12:53:35 · 906 阅读 · 0 评论 -
Java实现常用的排序算法(冒泡排序、选择排序、插入排序、希尔排序)
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。选择排序(Selection sort)是一种简单直观的排序算法。原创 2022-09-09 23:09:47 · 488 阅读 · 0 评论 -
Java递归实现迷宫问题和八皇后
问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。当一个方法执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。简单来说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。原创 2022-09-01 21:35:01 · 546 阅读 · 0 评论 -
Java实现中缀表达式转后缀表达式
逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)在实现中缀转后缀之前我们先了解后缀表达式的实现,学习过编译原理这门的课程的同学,应该对逆波兰式非常的熟悉哈,没错他就是后缀表达式。...原创 2022-08-30 15:38:13 · 1347 阅读 · 0 评论 -
Java环形链表实现约瑟夫环问题
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。原创 2022-08-28 16:51:21 · 412 阅读 · 0 评论 -
Java用栈实现表达式求值
当减号之前和会进行一个比对,当入栈的符号栈小于栈顶的优先级时,符号栈栈顶的运算符会和数字栈顶的两个元素进行运算,将运算结果放入数字栈顶。数字入栈发现入栈的是12字符串,因为12是一个数字,我们不能把他分开所以就必须将连续的数字拼接一起。大家学过数学的都知道*(乘法的优先级大于加法)所以应该先算3*3。...原创 2022-08-16 09:34:42 · 816 阅读 · 5 评论 -
Java实现栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。...原创 2022-08-15 16:00:01 · 164 阅读 · 0 评论 -
Java实现双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。发现错误可以直接在评论区指出,一般都能看到的哦,踊跃讨论,才能共同成长!...原创 2022-08-15 10:53:48 · 81 阅读 · 0 评论 -
Java实现单链表
如果有错误请指出问题,欢迎大家评论!!!https。原创 2022-07-22 15:23:50 · 237 阅读 · 0 评论 -
Java实现队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示当我们将数据存入队列时需要有两个步骤:添加元素时,将尾指针往后移:rear+1当 front == rear 时,队列为空若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear原创 2022-07-14 16:45:18 · 980 阅读 · 0 评论 -
Java稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模如图,把一个6X7的二维数组变为了一个9X3的稀疏数组。其中二维数组转稀疏数组稀疏数组转二维数组先读取稀疏数组的第一行(保存二维数组的行列信息),还原二维数组读取稀疏数组的其他行,将值赋给二维数组的对应位置上的数......原创 2022-07-13 15:39:59 · 284 阅读 · 0 评论