![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java数据结构
部分Java数据结构的内容
BEYONDmonster
一个学习Java软件开发的小白~多多指教
展开
-
Java数据结构---树-二叉树
存储数据的方式:数组存储、链式存储、树结构存储。数组存储方式分析:优点:通过下标方式访问元素,速度快。对于有序数组,还可以使用二分查找提高检索速度。缺点:如果检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。链式存储方式分析:优点:在一定程度上对数组存储方式有优化(例如:插入一个结点,只需要将插入的结点链接到链表中即可,删除效率也很好)。缺点:在进行检索时,效率任然较低,检...原创 2019-10-12 16:19:31 · 190 阅读 · 0 评论 -
数据结构---哈希表
哈希表属于一种数据结构,而不是一种算法。哈希表也叫散列表,是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列表:数组和链表相结合,将链表存放到数组中。将数据存放到结点中,由结点组成链表。根据散列函数确定数据放在哪个链表中。Java代码具体实现:import java....原创 2019-10-10 14:59:21 · 424 阅读 · 0 评论 -
递归---八皇后问题
八皇后问题:算法思路分析:1.第一个皇后先放第一行第一列2.第二个皇后放在第二行第一列,然后判断是否可行,如果不可行,继续放在第二列,第三列,依次把所有列都放完,找到一个合适的3.继续第三个皇后,还是第一列,第二列…直到第八个皇后也能放在一个不冲突的位置,算是找到了一个正确解4.当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放到第一列的所有正解,全部得到5.然...原创 2019-09-11 11:16:39 · 344 阅读 · 0 评论 -
递归---递归回溯解决迷宫问题
递归:简单的说就是方法自己调用自己,每次调用时传入不同的变量。递归有助于解决复杂的问题,也可以让代码变的简洁。递归调用规则:1.当程序执行到一个方法时,就会开辟一个独立的空间(栈)2.每个空间的数据(局部变量)是独立的可用递归解决部分数学问题:8皇后问题、汉诺塔、阶乘问题、迷宫问题等。还有部分算法中也会用到递归:归并排序、快速排序、分治算法等。递归需要遵守的重要规则:1.执行一个方法...原创 2019-09-11 09:32:07 · 713 阅读 · 0 评论 -
栈---中缀表达式转后缀表达式并完成表达式的计算
前缀表达式(波兰表达式),从右向左扫描表达式。前缀表达式的运算符位于操作数之前。中缀表达式,也就是常见的表达式,但是计算机不容易识别。后缀表达式(逆波兰表达式),从左向右扫描表达式。使用栈完成对表达式的计算:思路:1.先将表达式转为相对应的链表list2.完成对运算符优先级的定义3.根基优先级将该链表转为逆波兰表达式相对应的链表list4.根据逆波兰表达式对应的list进行计算得出...原创 2019-09-06 12:25:30 · 234 阅读 · 0 评论 -
栈---使用栈完成简单的表达式计算(1-2位数的加减乘除)
使用Java代码实现使用栈来完成简单的加减乘除表达式的计算。实现思想:1.使用数组来模拟栈2.创建俩个栈,一个数栈:用来存放数据,一个符号栈:用来存放运算符。3.在数组模拟实现栈的方法的基础上增加新的方法,用于计算运算符优先级的方法,用于返回栈顶的值的方法,用于判断是否是运算符的方法,用于计算结果的方法。4.给定一个字符串,对字符串的每个字符进行判断5.先判断是数字还是运算符,然后压入...原创 2019-09-05 18:19:45 · 846 阅读 · 0 评论 -
栈---单向链表模拟栈的实现
上一篇大致的介绍了栈,并使用数组的方式模拟了栈的实现。这次使用单向链表来模拟栈的实现用单向链表实现栈的思路:1.使用单向链表来模拟栈2.创建节点类,创建一个top指针表示栈顶,初始化为null3.入栈操作:当有数据加入到栈中时,将节点添加到链表的最后,并将top指针指向这个节点4.出栈操作:当有数据出栈时,将最后的节点出栈(将最后的节点从链表中删除),并将top指向最后节点的前一个节点...原创 2019-09-05 15:26:01 · 1119 阅读 · 2 评论 -
栈---数组模拟栈的实现
栈是一个先入后出的有序链表。栈(Stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最优先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。实现栈的思路:1.使用数组来模拟栈2.定义一个to...原创 2019-09-05 12:34:43 · 449 阅读 · 0 评论 -
约瑟夫问题---Java代码解决
Josephu问题:设编号为1,2,3,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队列的序列。解决思路:由一个不带头结点的循环链表来解决,先构成一个有n个节点的单循环链表,然后由k节点起开始计数,计到m的时候,对应节点从链表中删除,然后再从...原创 2019-09-04 17:15:21 · 318 阅读 · 0 评论 -
链表---双向链表之节点的增删改查
双向链表:双向链表是在单向链表的基础上,在每个节点上加了一个向前的指针。这俩个指针分别指向直接后继和直接前驱,使得双向链表更加方便。Java代码实现:(代码中有注释)public class DoubleLinkedlistDemo {public static void main(String[] args) { // TODO Auto-generated method stub...原创 2019-09-04 13:46:36 · 1153 阅读 · 0 评论 -
链表---单向链表之节点的修改和删除
单向链表的修改和删除操作一、对单向链表的节点的修改:(根据节点编号进行修改)思路:1.首先判断链表是否为空2.遍历链表,查找是否存在对应编号的节点3.如果存在该节点,则对该节点的内容进行修改实现代码如下:public class SingleLinkedListDemo {public static void main(String[] args) { // TODO Auto...原创 2019-08-29 15:08:34 · 1706 阅读 · 0 评论 -
链表---单向链表之添加节点(是否根据节点的顺序添加)
链表是以节点的方式来存储数据,即链式存储。每个节点包含data域、next域。链表的各个节点不一定都是连续存放。链表分带头结点的链表和没有头结点的链表,根据实际需求来确定。头结点:不存放具体的数据,用于表示单链表的头。以三国人物简单示范,每个人物对象是一个节点。添加节点(不考虑节点的顺序,按照节点的添加顺序进行存储)步骤思路:1.先创建一个head头结点,表示单链表的头2.每添加...原创 2019-08-28 01:55:04 · 768 阅读 · 0 评论 -
数组模拟队列
队列:队列是一个有序列表,可以用数组或者是链表来实现,队列遵循先入先出的原则。数组模拟队列的思路:队列本身是有序列表,若使用数组的结构来存储队列的数据,则数组的大小就是队列的最大容量。队列的输出输入分别是从前端和后端来处理,因此需要2个变量front和rear分别记录前端和后端下标。front:指向队列第一个元素的前一个位置rear:指向队列的最后一个元素数组大小为maxSize实...原创 2019-08-27 17:32:40 · 556 阅读 · 1 评论 -
二维数组与稀疏数组的相互转换
稀疏数组:当一个数组中的大部分元素为0,或者为同一个值时,可使用稀疏数组来进行保存。处理方法:1.记录数组共有几行几列,有多少个不同的值2.把具有不同值的元素的行列值进行记录,存储到一个小规模的数组中一下代码是二维数组与稀疏数组的相互转换的过程:public class SparseArray {public static void main(String[] args) { //...原创 2019-08-27 14:18:40 · 271 阅读 · 0 评论