自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 二叉树~删除节点

要求:1)如果删除的是叶子节点,则删除叶子节点2)如果删除的是非叶子节点,则删掉整个子树3)测试,删掉3号和5号节点思路:首先考虑:考虑如果树是空树,如果只有一个root节点,那么等价于将整个二叉树置空然后进行下面操作1)因为二叉树是单向的,所以我们是判断当前节点的子节点是否需要删除节点,而不能判断当前这个节点上是不是需要删除的节点2)如果当前节点的左子节点不为空,且左子节点就是要删除的节点,就将this.left == null;并且返回(结束递归)3) 如果当

2022-04-14 10:36:23 2054 1

原创 二叉树~查找指定节点

要求:1)请编写前序查找,中序查找和后序查找的方法。2) 并分别使用手种查找方式,查找heroNo= 5的节点3) 并分析各种查找方式,分别比较了多少次思路如下:代码实现://二叉树的遍历:前序、中序、后序public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一个二叉树 BinaryTree binaryTree = new BinaryTr.

2022-04-13 15:33:48 871

原创 二叉树的前序、中序、后序遍历

二叉树遍历的说明:前序遍历:先输出父节点,再遍历左子树和右子树中序遍历:先遍历左子树,再输出父节点,再遍历右子树后序遍历:先遍历左子树,再遍历右子树,最后输出父节点小结:看输出父节点的顺序,就确定是前序中序还是后序代码实现://二叉树的遍历:前序、中序、后序public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一个二叉树 Binar

2022-04-12 14:55:49 714

原创 数组、链表、树存储方式分析

二叉树:1.为什么要有树这种数据结构?1)数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动, 效率较低2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历...

2022-04-12 13:26:32 438

原创 哈希表(散列)

看一个实际需求,Google公司的一个上机题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,姓名,年龄,住址,,,)当输入该员工的id时,要求查找该员工的所有信息要求:不适用数据库,尽量减少内存,速度越快越好==>哈希表(散列)一、哈希表的基本介绍散列表(Hash table,也叫哈希表)是根据关键码值(Key value)而直接进行访问的数据结构,也就是说它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫散列表。

2022-04-11 16:15:06 610

原创 查找算法~

在java中,我们常用的查找有四种顺序(线性查找) 二分查找/折半查找 插值查找 斐波那契查找1)顺序线性查找有一个数列{1,8,10,89,1000,1234},判断数列中是否包含此名称,要求:如果找到了,就提示找到,并给出下标值//线性查找public class SeqSearch { public static void main(String[] args) { int[] array = {1,34,23,-5,6}; int in

2022-04-10 16:34:52 226

原创 八大排序算法~基数排序(桶排序)

一、基本介绍基数排序(radixsort) 属于“分配式排序”( distributionsort),又称“桶子法”(bucket sort)或binsort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是1887年赫尔曼何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。 ...

2022-04-09 15:10:42 392

原创 八大排序算法~归并排序

一、基本介绍归并排序(MERGE- SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。说明:可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。代码实现:import java.util....

2022-04-09 11:57:03 408

原创 八大排序算法~快速排序

一、基本介绍快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。代码实现://快速排序 public static void getQuickSort(int[] array,int left,int right){ int l = l...

2022-04-09 10:33:41 659

原创 八大排序算法~希尔排序

基本介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序法基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止.代码实现://希尔排序~交换法public static void getShellSort(int[...

2022-04-08 17:11:22 234

原创 八大排序算法~插入排序

基本介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。思想:插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码与依次有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。代码实现: //插入排序 public static vo

2022-04-08 15:10:54 529

原创 八大排序算法~选择排序

一、基本介绍选择排序也属于内部排序法,是从想排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的二、选择排序的思想代码实现: public static void getSelectSort(int[] array){ for(int j = 0; j < array.length-1; j++){ int minIndex = j; int min = array[j]; .

2022-04-08 13:54:55 383

原创 八大排序算法~冒泡排序

冒泡排序及优化测试时间复杂度

2022-04-08 12:42:26 118

原创 排序算法~八大排序算法

一、排序的分类1)内部排序指将需要处理的所有数据都加载到内部存储器中进行排序2)外部排序数据量过大,无法全部加载到内部中,需要借助外部存储进行排序常见的排序:二、算法的时间复杂度1.度量一个程序(算法)的执行时间有两种方法1)事后统计的方法,这种方法可行,但是有两个问题,一是要想对设计的算法的运行性能进行评测,需要实际运行该程序,;二是所得时间的统计量依赖于计算机的硬件,软件等环境因素,这种方式,要在同一台计算机相同状态下运行,才能比较哪个算法速度更快;2)事..

2022-04-08 10:10:44 114

原创 八皇后问题分析与实现~

一、基本介绍二、八皇后问题算法思路分析1)第一个皇后先放在第一行第一列2)第二个皇后放在第二行第一列,然后判断是否OK,如果不Ok,继续放在第二列,第三列,,,一次把所有列放完,找到一个合适3)继续第三个皇后,还是第一列,第二列,,,知道第八个皇后也能放在一个不冲突的位置,算是找到了一个正确解4)当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后放到第一列上的所有正确解都得到,5)然后回头继续第一个皇后放在第二列,后面继续循环执行1,2,3,4步骤说明:理

2022-04-06 19:45:19 116

原创 递归~从应用场景到实际问题解决----代码实现

一、递归的概念递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。二、递归的调用机制三、递归能解决什么样的问题?1)各种数学问题,如八皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题(google编程大赛)2)各种算法问题也会使用到递归:比如快排,归并排序,二分查找,分治算法,3)将用栈解决的问题-->递归代码比较简洁四、使用递归需要遵守的重要规则1)执行一个方法时,就会创建一个新的受保护的独立空间(占空间

2022-04-06 09:58:28 148

原创 Java基础面试~

1.接口和抽象类有什么区别?从设计目的上来说:接口体现的是一种规范,对于接口的实现者而言,接口规定了实现者必须对外提供哪些服务;对于接口的调用者来说,接口规定了调用者能调用哪些服务,以及如何调用这些服务,当一个程序中使用接口时,接口是多个模块间的耦合标准,当在多个应用程序间使用接口时,接口是多个程序间的通信标准; 抽象类体现的是一种模板式设计,抽象类作为多个子类的抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但这个产品依旧不能当最终产品,必须有更进一步的完善~

2022-04-04 14:22:18 414

原创 Java面试~类

1.介绍一下Object类中的方法?Class<?> getClass(); 返回该对象的运行时类;boolean equals(Object obj); 判断指定对象与该对象是否相等;int hashCode(); 返回该对象的hashCode值,默认情况下,是按照该对象的地址来计算。但很多类都重写了hashCode()方法,不再根据地址来计算返回值;String toString(); 返回该对象的字符串表示;clone(); 该方法用于帮助其他对象来实现自我克隆;w

2022-04-02 14:05:12 283

原创 Java基础面试~面向对象篇

1.谈一谈你对面向对象的理解?谈面向对象,就要和面向过程一起说;面向过程思想,步骤清晰简单,第一步做什么,第二部做什么,适合处理一些简单的问题,比如说洗衣服,先将衣服扔进洗衣机,然后倒入洗衣粉,再关闭洗衣机,最后按开始按钮,就这么简单!面向对象思想,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后,才对某个分类下的细节进行面向过程的探索,适合处理复杂的问题,适合处理需要多人协作的问题!比如说建一栋楼,需要一个总设计师,然后总设计师提出规划,打地基的打地基,拉材

2022-04-02 12:41:28 494

原创 JAVA基础面试

7.介绍一下实例变量的默认值byte:0short:0int:0long:0Ldouble:0.0float:0.0Fchar:'\u0000'boolean:false8.为什么要有包装类?Java语言是面向对象的语言,理念是“一切皆对象”,但是8种基本数据类型出现了意外,他们并不具备面向对象的特征,所以就提出包装类,包装类是8种基本数据类型的引用类。9.自动拆箱和自动装箱的实现场景?自动装箱和自动拆箱是JDK1.5提供的新功能自动装箱:把一个基本类型的

2022-04-02 09:39:31 53

原创 前缀,中缀,后缀(逆波兰表达式)~从分析到代码实现,一定要看到重点

前缀表达式:又称波兰表达式前缀表达式的运算符位于操作数之前例如:(3+5)* 6 - 2 的对应的前缀表达式是:- * + 3 5 6 2前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。1.从右至左扫描,将2,6,5,3压入堆栈2.遇到 +,弹出3,5,计算结果为8,将8压入堆栈, 2,...

2022-04-01 16:12:43 235

原创 栈实现综合计算器(中缀表达式)~从分析到代码实现

使用栈完成计算一个表达式的结果:思路:1.通过一个index值(索引),来遍历我们的表达式2.如果我们发现是一个数字,就直接入数栈3.如果是发现扫描到的是符号,就分下面情况: 3.1)如果发现当前的符号栈为空,就直接入符号栈3.2)如果当前的符号栈有操作符,就进行比较,如果当前的操作符优先级小于或等于栈中的操作符,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将得到结果入数栈,然后将当前的操作符入符号栈,如果当前的操作符优先级大...

2022-04-01 14:26:49 222

原创 栈~基本介绍与用数组模拟栈:从分析到代码实现

栈:stack; 栈是一个先进后出的有序列表; 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端, 为变化的一端, 称为栈顶(Top),另一端为固定的一 端,称为栈底(Bottom); 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。出栈(pop)和入栈(push)的概念如图:栈的应用场景:子程序的调用:在跳往子程序前,会先将下个指令的地址.

2022-03-30 14:11:11 62

原创 单向环形链表———约瑟夫问题

Josephu问题为:设编号为1, 2,... n的n个人围坐一圈, 约定编号为k (1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。单..

2022-03-29 16:51:03 788

原创 双向链表的应用实例

使用带head头的双向链表实现--水浒英雄排行榜管理单向链表的优缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表则可以自我删除,所以前面单向链表章节删除节点,总是找到temp,temp是待删除节点的前一个节点分析双向链表的增删改查遍历和单向链表一样,只是可以向前,也可以向后 添加:默认添加到最后 先找到这个双向链表的最后一个节点 temp.next = newHeroNode; newHeroNo.

2022-03-28 16:59:39 343

原创 单向链表常见面试题~真题为例

求单链表中节点的个数 查找单链表中的倒数第k个节点(新浪面试) 单链表的反转(腾讯面试) 从尾到头打印单链表(百度 要求:反向遍历,Stack栈) 合并两个有序的单链表,合并之后的链表依然有序 ...

2022-03-27 20:52:12 1111

原创 单向链表的增删改查总结~代码

//定义HeroNode,每个HeroNode对象就是一个节点class HeroNode{ public int no; public String name; public String nickname; public HeroNode next; //指向下一个节点 //构造器 public HeroNode(int no, String name, String nickname) { this.no = no; .

2022-03-26 15:33:51 83

原创 单链表之删除节点

思路:我们需要先找到删除这个节点的前一个节点 temp.next = temp.next.next 被删除的节点,将不会有其他引用指向,会被垃圾回收机制gc回收//删除节点 //head节点不能动,因此我们需要一个辅助节点temp,帮助我们找到待删除节点的前一个节点 //说明:我们在比较时是temp.next.no和需要删除的节点的no比较 public void deleteNode(int no){ HeroNode temp = head; ..

2022-03-26 15:29:36 1240

原创 单链表节点的修改~

//修改节点的信息,根据编号(no)来修改 public void update(HeroNode newHeroNode){ //判断是否为空 if(head.next == null){ System.out.println("链表为空!"); return; } //找到需要修改的节点,根据编号no //定义一个辅助变量,来帮助我们遍历寻找节点 He.

2022-03-26 14:31:07 408

原创 单链表之按顺序插入元素

单向链表第二种添加方式:按照排名将节点插入指定位置,如果指定位置有节点,就提示添加失败!需要按照编号的顺序添加首先找到新添加节点的位置,通过辅助变量,遍历来搞定 新的节点.next = temp.next 将temp.next = 新的节点//第二种方式插入节点 //按照英雄排名插入到指定位置,如果有这个排名,则提示插入失败 public void addNode2(HeroNode heroNode){ //因为我们找的temp是位于添加位置的前一个

2022-03-26 14:02:50 1203 1

原创 链表添加元素~从分析到代码实现

一、链表是有序的列表,它在内存中的存储如下:链表是以节点的方式存储的,是链式存储 每个节点包含data域(存数据),next域(指向下一个节点) 链表的各个节点不一定是连续存储的 链表分带头节点的链表和不带头节点的链表,根据实际的需求来确定二、单链表的添加:添加:1.先创建一个头节点,用于表示单链表的头2.后面我们每添加一个节点,就直接加入到链表的最后遍历:1.通过一个辅助变量,帮助遍历整个单链表三、代码实现//定义HeroNode,每个HeroNode..

2022-03-26 12:18:12 1640

原创 数组模拟队列--环形队列,完成队列复用

问题分析并优化:目前数组队列使用一次就不能用了,没有达到复用的效果 将这个数组使用算法:改进成一个环形的队列,取模 %思路:将front变量的含义做调整:front变为指向队列的第一个元素,也就是说array[front]是队列的第一个元素,front的初始值为0 将rear变量的含义做调整:rear变为指向队列的最后一个元素的后一个位置,因为希望空出一个空间作为约定。rear的初始值为0 当队列满使得条件是:(rear +1)%maxSize == front 当队列为空的条件是:rea

2022-03-25 19:11:42 57

原创 队列--使用数组模拟队列

一、队列简介:队列是一个有序列表,可以用数组或链表实现 遵循先入先出原则,也就是说:先存入队列的数据,要先取出,后存入的数据后取出数组模拟队列:队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如上图,其中MaxSize是该队列的最大容量 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front 会随着数据输出而改变,而rear则是随着数据输入而改变,如上图所示:...

2022-03-25 14:35:12 528

原创 稀疏数组棋盘保存与恢复问题--从分析到代码实现

一、稀疏数组的应用场景用一个二维数组存储棋子的位置,大部分二维数组的值都默认为是0,记录了很多没有意义的数据,考虑用稀疏数组压缩。二、基本介绍概念:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中, 从而缩小程序的规模...

2022-03-25 12:22:10 268

原创 数据结构介绍

数据结构与算法

2022-03-24 20:42:05 36

原创 JavaEE面试基础

Java的数据类型? 有8种基本数据类型和引用类型两大类; byte,short,int,long(整数类型);float,double(浮点型);char(字符型);boolean(布尔型); 除了boolean之外其他都可看作数字类型,可以进行相互转换; 引用类型就是对一个对象的引用,根据引用对象的类型不同,可以分为数组、类、接口。引用类型的本质就是通过指针,指向堆中对象所持有的内存空间。 详细介绍基本数据类型 byte:1字节8位,数据范围位 -2^7~2^7-1 shor.

2022-03-17 21:18:00 311

原创 JavaEE基础回顾

面试笔记

2022-03-15 21:57:02 321

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除