数据结构与算法Java
文章平均质量分 71
我叫向同学
永远不要停下前进的脚步
展开
-
八大排序算法总结Java代码实现(建议收藏后食用)
排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。假设含有n个记录的序列为{r1,r2,·······,rn},,其相应的关键字分别为{k1,k2,·······,kn}。需要确定1,2·····,n的一种排列 p1,p2,·······,pn,使其相应的关键字满足kp1≤ kp2···· ≤kpn非递增(非递减)关系,即使得序列成为一个按关键字有序的序列{r1,r2,·······,rn},这样的操作称为排序。......原创 2022-08-05 13:58:09 · 1154 阅读 · 4 评论 -
八皇后问题(Java代码实现)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92)。注:理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题. ar[8]={0 ,4,7,5,2,6,1,3/1对应 arr 下标表示第几行,即第几个皇后,a[i]= val , val表示第i+1个皇后,放在第i+1行的第val原创 2022-06-26 14:07:12 · 2892 阅读 · 0 评论 -
数据结构之递归的应用场景迷宫问题
简单的说:递归就是方法自己调用自己,每次调用的时传入不同的变量。递归有助于开发解决复杂的问题,同时可以使代码变的简洁。直接上代码,用案例说明,我觉得在学校老师好像讲过很多遍了,但是过一端时间自己又写不出来。看一下输出结果吧输出结果迷宫问题是栈这一块很经典的问题。迷宫大致可分为三种,简单迷宫、多通路迷宫:通路间不带环、多通路迷宫:通路间带环,其中带环多通路迷宫是最复杂的,解决它,要把栈与递归结合起来,下来我们来一个一个分析吧,先从简单迷宫开始。给定一个迷宫Maze,并给定迷宫的路口和出口,用递归的方式原创 2022-06-21 23:53:34 · 337 阅读 · 0 评论 -
中缀表达式转换为后缀表达式Java实现
后缀表达式适合计算机进行计算,但是并不适合我们日常计算习惯,特别是碰到表达式特别长的情况下,因此我们使用栈,我们将中缀表达式准成后缀表达式来进行计算。将中缀表达式“1+((2+3)×4)-5”转换为后缀表达式的过程如下因此结果为: 1 23+4 ×+5-......原创 2022-06-19 21:35:14 · 783 阅读 · 0 评论 -
数据结构之栈使用逆波兰表达式实现计算
逆波兰表达式又叫做后缀表达式。逆波兰表达式,就是一种将平时我们所写的算术表达式(即中缀表达式)按照一定的规则进行转换后形成的一种表达式形式后编译计算机进行计算。举例中缀表达式:(3+4)×5-6 对应的后缀表达式就是34+5× 6 -,针对后缀表达式求值步骤如下:输出结果...原创 2022-06-15 23:28:12 · 369 阅读 · 0 评论 -
数据结构之使用栈实现计算器
可以先看这篇中缀表达式转换后缀表达式原创 2022-06-13 10:05:38 · 658 阅读 · 0 评论 -
数据结构之栈的应用场景
如题:请输入一个表达式表达式 7 * 2 * 2 - 5 + 1 - 5 + 3 - 3试问:计算机底层是如何得到结果的?但是计算机是理解这个算式的,对于计算机来说,他收到的是一个字符串,因此就要想一个办法,把他的数组拆出来,然后还得运算符是什么,还要考虑运算符的优先级。要解决这个问题就需要用到栈。元素入栈如下如所示元素出栈如下图所示栈的一下应用场景因为栈是一种有序表,当然可以使用数组的结构来存储栈的数据内容,如下代码演示数组模拟栈的出栈和入栈操作。输出结果...原创 2022-06-11 11:53:33 · 1449 阅读 · 0 评论 -
单向环形链表之约瑟夫问题
约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。分析:用一个不带头结点的循环链表来处理Josephus 问题,首先构成一个有n个结点的单循环链表。由k结点起从1开始计数,记到m时,对应结点从链表删除。然后从被删除结点的下一个节点又从1开始计数,直到最后一个节点从链表中删除。对于单链原创 2022-06-09 20:56:35 · 1052 阅读 · 0 评论 -
数据结构之双向链表(Java代码)
首先要明白单链表,对单链表还比较朦胧的可以去下面的链接扫一眼。数据结构之单链表超详细说明:分析双向链表的遍历,添加,修改,删除的操作思路===》代码实现l)遍历方和单链表一样,只是可以向前,也可以向后查找添加(默认添加到双向链表的最后)(1)先找到双向链表的最后这个节点(2) temp.next = newHeroNode(3) newHeroNode.pre = temp;修改思路和原来的单向链表一样删除(1)因为是双向链表,因此,我们可以实现自我删除某个节点(2)直接找到要删除的这个节点原创 2022-06-06 22:58:25 · 111 阅读 · 0 评论 -
数据结构之单链表超详细
链表是有序的列表,它在内存中存储结构如下:下图是带头结点的链表简单的描述一下:头指针head 指向地址150的data域a1,a1的next域指向110的地址的data域a2,,依次类推。从上图我们可以得到如下信息:单链表(带头结点)逻辑结构示意图如下:使用带 head头的单向链表实现–水浒英雄排行榜管理完成对英雄人物的增删改查操作。输出结果目前insert插入没有考虑编号,怎么根据no排序了?添加结点的时候,根据排名将结点插入到指定的位置(如果这个位置有人,则添加失败,并提示。)输出结果原创 2022-06-05 19:41:36 · 989 阅读 · 1 评论 -
队列的应用场景和实现
队列是一个有序列表,可以用数组或者是链表来实现。队列的两端都"开口",要求数据只能从一端进,从另一端出。通常,称进数据的一端为 “队尾”,出数据的一端为 “队头”,数据元素进队列的过程称为 “入队”,出队的过程称为 “出队”。队列中数据的进出要遵循 “先进先出” 的原则,即最先进队列的数据元素,同样要最先出队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front 队头)进行删除操作,而在表的后端(rear 队尾)进行插入操作拿排队买票来说,所有的人排成一队,先到者排的就靠前,后到者只能从队尾原创 2022-06-03 11:48:35 · 1423 阅读 · 0 评论 -
稀疏数组SparseArray 的应用场景
看一个实际的需求。将下图的棋盘保存。可以看着这个棋盘是11*11的棋盘,棋盘中现在有两个棋子。有一个最简单的办法就是使用二维数组,将棋盘保存下来。那么这个二维数组就有11行11列。假设右图中1表示黑子,2表示蓝色的棋子。第二行第三列是一个黑子,第三行的第四列是蓝色棋子。那么问题来了哦把这个棋盘转换成二维数组,应该很简单吧,右图中可以看到该二维数组中的很多默认值都是0,因此记录了很多没有意义的数据。怎么办呢?上图中,第一行记录数组的行和列为6行7列,值记录数组中一共有多少个不同的值。下面的每一行记录每一个原创 2022-06-01 23:04:40 · 307 阅读 · 0 评论