Java数据结构
挖点代码拌西瓜
以梦为马,莫负韶华。
展开
-
八大排序算法思路汇总
冒泡排序(Bubble Sort):对于一组无序的元素,从头到尾依次比较相邻两个元素的大小,如果前一个元素比后一个元素大(或小)的话,就交换两个元素的值,重复交换的过程,直到这组元素有序。选择排序(Selection Sort):对于一组无序的元素,第一次从arr[0]~arr[n-1]中选取最小值与arr[0]交换,第二次从arr[1]~arr[n-1]中选取最小值与arr[1]交换,第n-...原创 2020-04-13 17:58:48 · 247 阅读 · 0 评论 -
二叉树的创建、遍历、查找、删除
我们最初学习数据结构的时候,肯定是先从线性结构和链式结构讲起,回顾一下他们的特点。线性结构以数组为例,它通过下标的方式访问元素,访问速度很快,但是当我们向数组中插入或删除某个元素时,会将插入位置的元素整体移动,从而造成效率低下。链式结构以单链表为例,它在插入或删除元素时,只改变链表的指向并且不移动元素,能够解决线性结构插入或删除元素效率不足的问题,但是当我们需要访问某个元素时,只能从单链表...原创 2020-04-10 23:10:30 · 558 阅读 · 0 评论 -
常用的四种查找算法总结
1.线性查找:线性查找常用于判断数组中是否有要查找的值,通过直接遍历数组,判断元素是否相等即可。由于线性查找很简单,直接贴代码。这里的代码只实现了,查找第一个元素的下标,如果找到所有元素可以定义一个集合,将return i;改成向集合中添加元素即可。public class SeqSearch { public static int seqSearch(int[]arr...原创 2020-04-05 18:30:37 · 2106 阅读 · 0 评论 -
教您搞懂归并排序
归并排序的算法原理:该算法采用经典的分治策略,分是指将问题分成许多小的问题,然后递归求解,而治则是将分的阶段得到的各答案"修补"在起,即分而治之。归并排序图解:图片如有侵权请联系本人合并相邻子序列:归并排序代码框架:public class MergeSort { /** * 分治算法:分阶段,将数组每个元素分开 * @param ar...原创 2020-04-03 14:54:37 · 124 阅读 · 0 评论 -
八皇后问题
八皇后问题的背景:1848年,国际西洋棋手贝瑟尔提出在 8x8 的国际象棋上摆放八个皇后,任意两个皇后不能处于同一行、同一列或者同一斜线上,问一共有多少种摆法? 思路分析:第1个皇后先放在第1行第1列, 第2个皇后放在第2行第1列,然后判断是否满足条件,不满足就继续放在第2行第3列、第2行第4列,直到在第2行的8列中找到合适的列位置, 第3~8个皇后与第2个皇后做法一样, ...原创 2020-03-28 12:11:46 · 359 阅读 · 0 评论 -
中缀表达式转后缀表达式
中缀表达式简单的讲就是我们平时看到的混合运算式,比如1+((2+3)x 4)-5,但是计算机运算这样的式子并不方便,我们就需要将中缀表达式进行转换,转换成适合计算机计算的式子称为后缀表达式,转换后的式子叫做后缀表达式。转换的过程有些复杂,我们来看一下大牛们发明的算法思路。中缀表达式转后缀表达式思路:我们还是以1+((2+3)x 4)-5为例来理解这个思路的具体工作流程:开始第...原创 2020-03-26 19:38:50 · 261 阅读 · 0 评论 -
栈:综合计算器案例
问题背景:使用栈来模拟表达式计算,比如计算字符串String data = "13+10*3-2"的值。使用栈完成表达式计算的思路分析:遍历表达式,将字符串按照字符数组来操作; 如果遍历到的字符是数字,就直接压入数字栈中; 如果遍历到的字符是符号,判断操作符栈是否为空; 如果操作符栈为空:直接将该字符压入操作符栈中; 如果操作符栈不为空,那么判断操作符的优先级(自定义优先级);...原创 2020-03-24 22:20:58 · 96 阅读 · 0 评论 -
数组模拟入栈出栈
首先对栈做一个简单的介绍,栈是一个先入后出的有序列表,可以看成特殊的队列,它限制了数据的插入和删除操作只能在线性表的同一端(栈顶)。栈的常见操作:插入:在栈中插入操作称为入栈,最先放入栈中的元素在栈底,最后放入的元素在栈顶。 删除:在栈中删除操作称为出栈,最先删除的元素在栈顶,最后删除的元素在栈底。入栈和出栈示意图:实现栈的思路:使用数组来模拟(单链表也是可以的); 定义...原创 2020-03-21 19:48:32 · 1091 阅读 · 0 评论 -
约瑟夫环问题
引入问题背景:设编号为1,2,3.....n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号序列。分析:如何表示围坐一圈?使用单向环形链表; 如何处理编号k? 如何处理m?单向环形链表的表示:由于是环形链表,不需要向单向或双向链表那样,头结点...原创 2020-03-21 10:47:25 · 150 阅读 · 0 评论 -
Java版队列
队列是一个有序列表,可以使用数组或者链表来模拟,这篇博客主要采用数组模拟,链表模拟将在后面展示。说起队列的特点,首先想到先进先出,先存入队列的数据先取出,后存入的后取出。话不多说直接上图根据队列的模拟图,我们可以总结出以下几点:队列的最大容量MaxSize; 队列输入、输出,分别从前后端来处理,需要两个变量记录front、rear 队空条件:front=rear=-1(有的...原创 2020-03-16 08:52:08 · 88 阅读 · 0 评论 -
循环队列
循环队列,主要是解决单队列浪费空间问题,当我们使用单队列执行出队时,出队后的位置空闲,但是没有办法存储新数据,造成了一定程度上的空间浪费,而循环队列就解决了这个问题。循环队列如何解决浪费空间问题呢?我们发现单队列主要是数组下标无法循环使用,我们让下标循环就好了呗。怎么让下标循环呢?这里用到一点小算法:取余。我们来看个图:图片下标有问题,懒得改了,大家将就着看吧。从图中我们看到几...原创 2020-03-15 13:53:51 · 854 阅读 · 0 评论