自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 16、顺序存储二叉树

顺序存储二叉树一、什么是顺序存储二叉树二、顺序存储二叉树的特点三、图解四、代码一、什么是顺序存储二叉树顺序存储二叉树就是用数组的方式存储二叉树,通常只考虑完全二叉树的情况。二、顺序存储二叉树的特点数组下标为 n 的左孩子的下标为2n+1;数组下标为 n 的右孩子的下标为2n+2;数组下标为 n 的父节点的下标为(n-1)/2;三、图解可见,1 是根节点,其左孩子的下标为2*0+1=1,arr[1]=2;右孩子的下标为2*0+2=2,arr[2]=3;其它的节点以此类推。四、代码p

2021-03-11 14:55:27 139 1

原创 15、二叉树的层序遍历

二叉树的层序遍历一、层序遍历的概念二、思路分析三、代码一、层序遍历的概念将一颗二叉树按照层次顺序遍历整棵树。先遍历第一层(root层),接着遍历第二层,再接着时第三层…直到将所有节点遍历完成。层序遍历示意图二、思路分析完成层序遍历需要用到一个队列Queue来辅助。1、若当前节点不为空,将当前节点入队列;2、判断当前队列是否为空;3、若队列不为空,第一个元素出队列,并将其左子树入队列、右子树入队列;4、若队列为空,说明层序遍历完成;三、代码package com.tree;imp

2021-03-10 11:29:22 146

原创 14、二叉树的先序,中序,后序遍历

二叉树的遍历一、为什么需要树存储结构二、二叉树示意图三、二叉树的遍历四、代码一、为什么需要树存储结构数组存储方式的分析优点:通过下边访问数组元素,访问速度快。对于有序数组,可以使用二分查找、插值查找等方法提高检索速度。缺点:如果要删除或者在指定位置插入某个值,会造成大量元素移动,效率较低。单链表存储方式分析优点:在元素的插入、删除方面相对于数组方式有优化,效率得到提高。缺点:在进行检索时,需要链表头部依次检索,效率低。二、二叉树示意图三、二叉树的遍历前序遍历输出当前节点;

2021-03-10 09:14:11 93

原创 13、哈希表

哈希表

2021-03-09 09:12:39 87

原创 12、插值查找

插值查找一、思路分析二、代码一、思路分析插值查找的基本思想和二分查找的基本思想类似。二分查找中mid的取值为 mid = (left+right)/2 = left + (right - left)/2。插值查找中mid的取值为mid=left+(item-arr[left])/(right-left)*(arr[right]-arr[left])。注意:因为在上述mid的计算公式中(item-arr[left])有可能为负数,则在插值算法的条件中需要加上判断条件item >= arr[le

2021-03-05 16:26:12 108

原创 11、二分查找

一、思路分析在一个有序序列arr[left,…,mid,…right]中查找一个元素item是否存在。mid = (left+right)/2;用arr[mid]和item比较大小:若item>arr[mid],则去序列右边查找item,若item<arr[mid],则去序列左边查找item,若item=arr[mid],则说明找到item,返回true。二、代码package com.Search;/** * 二分查找算法,只能在有序序列中使用 * * @author

2021-03-04 22:16:02 145 1

原创 10、归并排序

归并排序一、思路分析二、图解三、代码一、思路分析归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。二、图解再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2

2021-03-04 21:10:33 123 1

原创 9、快速排序

快速排序一、思路分析二、图解三、代码一、思路分析快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分成独立的两部分,左部分所有数据都小于右部分所有数据,然后再按照这种方法分别对这两部分进行快速排序,直到整体都是一个有序的序列。二、图解三、代码...

2021-03-04 15:54:14 99 1

原创 8、插入排序

插入排序一、思路分析二、图解三、代码一、思路分析将序列看成是两个列表,左边看做有序列表,右边看作无序列表,刚开始有序列表只包含一个元素arr[0],无序列表包含剩余元素arr[1]~arr[n-1];第一趟排序后将无序列表的第一个元素arr[1]合并到有序列表中,有序列表变成(arr[0], arr[1])或者是(arr[1], arr[0]),无序列表包含剩余元素arr[2]~arr[n-1];第二趟排序将无序列表的第一个元素arr[2]合并到有序列表,有序列表变为(arr[1], arr[0],ar

2021-03-03 11:52:24 127 2

原创 7、选择排序

选择排序一、基本思想二、图解三、代码一、基本思想选择排序(select sorting)的排序思想:第一次从arr[0]~arr[n-1]中选择最小值和a[0]交换位置,第二次从arr[1]~arr[n-1]中选择最小值和arr[1]交换位置,第三次从arr[2]~arr[n-1]中选择最小值和arr[2]交换位置,以此类推,总共需要进行n-1趟选择交换,最终得到一个有序列表。二、图解每趟中标红的两个数字交换位置。三、代码package com.sort;import java.util.

2021-03-02 20:44:22 94

原创 6、冒泡排序

冒泡排序一、基本思想二、优化三、图解四、代码一、基本思想通过对待排序序列从前到后(从下标小的元素开始),以此比较相邻元素的值,若发现逆序则交换。没有优化时要进行arr.length-1趟排序。二、优化因为排序过程中,各个元素不算靠近自己的位置,若在某一趟排序中,没有元素发生交换,就说明已完成序列排序。因此可以设置一个flag标志来判断在一趟排序中是否发生元素交换。优化后能够减少需要排序的趟数。三、图解四、代码package com.sort;import java.util.Arrays

2021-03-02 20:07:16 204

原创 4、递归-迷宫问题(走迷宫)

一、需求分析在迷宫中,找到一条从起点到达终点的通路,有通路则返回true,并显示通路,否则返回false。二维数组模拟迷宫,0:表示当前节点没有走过;1:表示墙,不能走。二、解决思路1、先定义几个数字,0:表示当前节点没有走过;1:表示墙,不能走;2:表示当前节点为通路;3:表示当前节点已经走过,但是不是通路。2、假设当前节点为通路,设置值为2。3、检查当前节点的上下左右四个节点,若上下左右四个节点都不通,则将当前节点值设置为3;若上下左右四个节点中有某一个节点为通路,则当前节点值为2保

2021-03-01 16:25:34 329

原创 3、中缀表达式转换成后缀表达式

1、需要使用两个栈,一个用于存放后缀表达式的中间结果(tempStack)和一个用于存放操作符(operStack);2、扫描到"(",此时operStack为空,直接入栈operStack => "("3、扫描到"3",数字直接入栈tempStacktempStack => "3"operStack => "("4、扫描到"+",优先级大于operStack栈顶元素的优先级,直接入栈operStacktempStack => "3"operStack => "(","+"5、扫描到"4

2021-02-25 11:04:30 351 1

原创 2、利用栈计算后缀表达式(逆波兰表达式)

一、需求分析1、输入一个逆波兰表达式,利用栈计算其结果;2、支持小括号和多位数整数;二、思路分析例如:(3+5)*5-6对应的后缀表达式为3 5 + 5 * 6 -,其求值步骤如下:1.从左到右扫描,遇见数字直接入栈,3和5入栈;2.遇见操作符+,从栈中弹出两个数3和5,根据操作符计算结果为8,并将结果8入栈;3.将5入栈;4.遇见操作符*,弹出两个操作符5和8,计算结果为5*8=40,将40入栈;5.将6入栈;6.遇见操作符-,弹出两个数字6和40,计算结果为40-6=34,将34入栈

2021-02-24 20:51:10 367

原创 1、利用栈计算中缀表达式

Java栈计算中缀表达式一、思路分析给出一个中缀表达式:“3+2*6-2”从左到右依次扫描字符串,当前字符为数字时,直接进数字栈;当前字符为运算符时,若当前运算符栈为空,则直接入栈,否则拿当前运算符与运算符栈顶运算符比较优先级,若当前运算符优先级>=栈顶运算符优先级,则直接入栈,若当前运算符优先级<栈顶运算符优先级,则从数字栈中弹出两个数据且从运算符栈中弹出栈顶运算符,计算结果;将计算结果入数字栈,当前运算符入运算符栈。直到字符串扫描结束,如果运算符栈不为空,则从数字栈中弹出两个数据且

2021-02-24 20:16:30 1491

原创 markdown的基本使用

欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片

2021-02-24 19:59:53 70

空空如也

空空如也

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

TA关注的人

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