![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA数据结构
搞前端的小菜
热爱前端的小菜,低代码方向的爱好者
展开
-
JAVA递归解决迷宫问题(详解)
如果说到递归思想,首先想到的肯定是一些比较常见的问题,什么阶乘,最大公约数,等等。而这些也是比较简单很容易理解的。而这一篇文章讲的问题是关于迷宫的一个小问题。我们用二维数组来模拟一个迷宫:“1”就是代表城墙的意思,右下角的“0”是终点位置,给一个起点位置,如果在不穿过城墙的情况下可以到达终点,那么就说这个起点位置是正确的。很简单的一个游戏,如果我们用代码来找这么一条路的话应该怎么实现呢?如果我们从红色的这个开始走,我们要用什么样的思路来实现呢。我们可以规定一个步骤:1.判断下面是否可以走原创 2020-10-06 19:06:20 · 1730 阅读 · 0 评论 -
JAVA用栈计算后缀表达式(详解)
在上一篇我们已经说过如何计算中缀表达式了,那么这一篇就来说一下如何来计算后缀表达式的值。后缀表达式呢,要比中缀表达式的计算要容易得多。和上一次一样,我们先来分析一下过程应该是什么样子呢?我这里有一个后缀表达式,一个栈,还有分析过程,我们就拿这个表达式来做一下演示。我们从左到右扫描,34都是数字直接入栈。然后遇到运算符+,我们弹出栈的两个数并运算,结果入栈。然后下一个是5,直接入栈。再下个是*,依旧弹出两个数,进行运算。结果入栈然后下个是6,我们直接入栈。然后是 - ,我们依旧弹出原创 2020-09-30 11:53:51 · 1420 阅读 · 1 评论 -
JAVA用栈计算中缀表达式(详解)
那,在上一篇呢,已经写好了如何去实现一个栈了。在最开始我就说过,栈的实现很简单,但用栈来解决一些实际问题,可能会有点难度。今天这一篇就是用栈这个数据结构,来解决中缀表达式的计算。也就是数学表达式的计算。题目也很简单:假如有个字符串表达式(“5+2*5-4/1”),用栈来计算这个表达式的值。OKK,现在我们来分析一下怎么来做。然后再用代码实现。那,这是我整理好的思路,似乎第一眼看到后,很懵逼。没有关系,我们用一个例子来分析一下,瞬间就会明了。就用上面我提到过的表达式(5+2*5-4/1)。原创 2020-09-27 16:17:13 · 2717 阅读 · 2 评论 -
JAVA用数组实现栈(详解)
关于栈是什么,这里是真的不多说了,不管学什么语言,只要涉及到数据结构,一定在开始就有栈这个概念。而我们所熟知的也就是先进后出。但也是这个先进后出最能体现出栈的特点。总得来说呢,栈的实现并不难,但是很多算法和功能实现都需要用到栈,所以栈这个数据结构也变得至关重要,所以这一篇,我们就说一下怎么用数组实现一个栈。我们先从原理下手, 想一想一个栈我应该怎么实现出来?看图,如果我有一个数组arr为空,并且有一个变量top,让他初始值为-1;每次添加元素,我们就让top++,并且把值给arr[ top ],原创 2020-09-24 22:33:25 · 2233 阅读 · 2 评论 -
JAVA用环形链表解决约瑟夫问题(详解)
那如果想解决约瑟夫问题,那我们就再来回顾一下约瑟夫问题:约瑟夫问题是个有名的问题:N个人围成一圈,从某一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。那这句话的意思是什么呢,要怎么理解呢?我们用图来看一下:看一看到五个圆围成了一个圈,每个圆有自己的编号。假设我们从1号开始报数,每次报数后的第二个会被杀掉。那么第一个出局的应该是2号。这个时候再从第三个开始报数,然后第4号淘汰。然后再从第四号开始报数,以此类推。。。。最后确定出一个淘汰的顺序。OK。原理我们已经知道了,那原创 2020-09-23 14:46:12 · 600 阅读 · 0 评论 -
JAVA实现环形链表(详解)
关于单链表和双向链表,在之前的LinkedList源码里我已经写过一次了。。。所以这次关于链表的分析就只剩环形链表了而这一篇,主要是讲解原理以及代码实现,不涉及到解决问题。所以接下来的重点主要在于如何用代码来实现出一个环形链表。所谓环形链表也就是在单链表的基础上,让最后一个节点的next指向第一个节点,所以说这次我们就不能设置头节点了(不然最后一个节点会指向一个没用的节点)。。那我们就开始写第一步,也就是最开始的一步,创建一个节点类。public class Node { private原创 2020-09-22 22:50:10 · 3156 阅读 · 0 评论 -
JAVA实现双向链表超详解(图解)
这一篇,说一下双链表的实现,双向链表一定是在单链表的基础上,进行优化,才能成为双链表,关于单链表的文章,可以看下面这个链接:https://blog.csdn.net/weixin_46726346/article/details/107687955所以一些重复的东西就不会再说了,言归正传,我们开始说双向链表;之前说过单链表的结构,我们再来看一下:单链表的查询方式,只能通过顺序遍历一遍才能查询,这也是单链表的一个缺陷,那有没有什么解决办法,或者是优化办法,这个时候双向链表出现了!我们来看一下双向原创 2020-07-31 14:51:33 · 1569 阅读 · 2 评论 -
JAVA实现单链表超详解(图解)
这一篇,说一下java的单链表的实现,如果有C语言的基础的话,应该知道,在C语言中,链表的实现是用指针来实现的,也就是用指针来指向下一个节点的地址来实现链表。那在java中没有指针的这个概念,我们应该怎么实现,怎么来表示地址,怎么指向一个地址;我们来看一个例子:Student stu=new Student();那,我们知道这行代码是一个对象的实例化,那这行代码到底是什么意思呢?我们这样理解:stu这个变量存储在栈内存中,右边的new Student()存储在堆内存中,就像这样:也就是可以原创 2020-07-30 14:27:59 · 4064 阅读 · 8 评论 -
JAVA数组实现环形队列(下篇)
关于上一篇文章,测试了代码发现所实现的队列只能使用一次。、是一个问题很大的数据结构。所以为了能够让队列变得优化,对上一篇的代码进行了修改。关于上一篇队列的实现,只能使用一次的原因也说过了。这里再简单说一下:如果我们在队列里面添加满元素后:rear指向最后一个数组元素的位置。这个时候队列满了。然后我们再出队出队一直出。即便最后一个元素也出队了,但是里面的元素并没有删除,只是front++到了rear的位置,因为二者相等,所以起到了一个队列为空的效果。但也正是因为这样。我们这个队列才只能原创 2020-09-12 21:24:41 · 122 阅读 · 0 评论 -
JAVA数组实现队列(上篇)
这一篇,说一下怎么用JAVA实现一个队列,那我们就要知道什么是队列,队列是一种比较简单的数据结构,我们来看一下队列的定义:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。也就是我们经常所说的**“先进先出”**。那如果我们用数组实现一个队列,我所学过的语言实现的方法似乎都大致一样。首先我们创建一个数组是一定的,大小可以由用户来确定。然原创 2020-09-11 15:59:38 · 159 阅读 · 0 评论 -
JAVA中的二维数组和稀疏数组之间的转换
由于是开学季,也确实是好久没有更新博客了,主要也是因为自己一直在学新东西,之前的没啥好分享的了。今天开始主要就是更新JAVA中的数据结构,第一篇就是关于稀疏数组的转换问题。说到稀疏数组,首先要知道稀疏数组是什么?我在网上找到了一张图。我们来看左边,是一个正常的二维数组,但是这个二维数组的大部分元素都是0.似乎有些浪费空间,我们有没有一种方法能够简化这种二维数组。这个时候稀疏数组出现了,让我们看一下右边的数组。我们记住,稀疏数组的列数一定是3,分别代表行列值。而且稀疏数组的第一行数据代表的是原创 2020-09-09 11:59:35 · 148 阅读 · 0 评论