Java 数据结构与算法
文章平均质量分 77
数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。
_子栖_
这个作者很懒,什么都没留下…
展开
-
数据结构-线索化二叉树
文章目录1、什么是线索二叉树2、中序线索化二叉树2.1 中序线索化二叉树实现2.2 中序线索化二叉树遍历实现3、先序线索化二叉树3.1 先序线索化二叉树实现3.2 先序线索化二叉树遍历实现4、后序线索化二叉树4.1 后序线索化二叉树实现4.2 后序线索化二叉树遍历实现1、什么是线索二叉树线索二叉树是二叉树的一种,我们先看一个二叉树存储例子。上图中的 # 是空的,会浪费一部分空间,如果我们希望将这些空的指针充分利用,让各个节点都可以指向自己的前驱结点和后继节点,那就需要使用到线索二叉树。现有一颗节原创 2021-10-26 17:37:56 · 5466 阅读 · 0 评论 -
数据结构-二叉树
文章目录1、为什么需要树这种数据结构?1、为什么需要树这种数据结构?数组存储方式分析优点:通过下标的方式访问元素,速度快。对于有序数组,还可以使用二分查找提高检索速度。缺点:如果要检索具体某一个值,或者插入值(按一定顺序)会整体移动,效率极低 【示意图】链式存储方式分析优点:在一定程度上对数组存储方式有优化,如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好缺点:在进行检索时,效率仍然较低,比如(检索某一个值,需要从头结点开始遍历) 【示意图】原创 2021-10-24 14:02:20 · 129 阅读 · 0 评论 -
数据结构-哈希表
文章目录1、哈希表(散列)- Google 上机题2、哈希表的基本介绍3、上机题4、代码实现1、哈希表(散列)- Google 上机题看一个实际需求,Google 公司的上机题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id、性别、年龄、住址…),当输入该员工的 id 时,要求查到该员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好 ==》{哈希表}2、哈希表的基本介绍哈希表(HashTable,也叫散列表),是根据关键码值(key、value)而直接进行访问的数原创 2021-10-22 14:58:39 · 205 阅读 · 0 评论 -
数据结构-查找算法
文章目录1、查找算法介绍2、线性查找算法3、二分查找算法4、插值查找算法1、查找算法介绍在Java 中 我们常用的查找有四种:线性查找折半查找(二分查找)插值查找斐波那契查找2、线性查找算法有一个数组:[1,8,10,89,1000,1234],判断数组中是否包含此数字【顺序查找】???? 代码实现public class SeqSearch { public static void main(String[] args) { int [] arr = {原创 2021-10-21 16:24:36 · 253 阅读 · 0 评论 -
排序算法-希尔排序
文章目录1、简单插入排序存在的问题我们看简单的插入排序可能存在的问题。数组 arr = {2,3,4,5,6,1} 这是需要插入的数 1(最小),这样的过程是:{2,3,4,5,1,6}{2,3,4,1,5,6}{2,3,1,4,5,6}{2,1,3,4,5,6}{1,2,3,4,5,6}结论:当需要插入放入数是较小的数时,后移的次数明显增多,对效率有影响2、希尔排序算法介绍希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为最小增量排序3、希尔排序的基本原创 2021-10-15 15:40:25 · 487 阅读 · 0 评论 -
数据结构-插入排序
文章目录1、插入排序2、算法分析3、代码实现4、复杂度分析5、稳定性分析1、插入排序插入排序就像你玩扑克。基本操作就是将一个记录插入到已排好序的有序表中,直到将所有的未排序的记录插入到适当的位置。2、算法分析为了深入理解插入排序,来看一个例子:刚开始,我们将数组的第一个元素 5 当做有序元素,假设它在正确的位置;然后将 1 插入到正确的位置,将 1 与 5 比较,1 < 5,5 前面没有任何元素,所以 1 正确的位置就在 5 前面将 4 插入到正确的洞,将 4 和 5 比较原创 2021-10-15 14:50:56 · 406 阅读 · 0 评论 -
排序算法-简单选择排序
文章目录1、基本介绍2、选择排序的思想3、选择排序思路分析图4、代码实现1、基本介绍选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的2、选择排序的思想选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0] ~ arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1] ~ arr[n-1]中选取最小值,与arr[1]|交换,第三次从arr[2] ~ arr[n-1]中选取最小值,与a原创 2021-10-14 21:00:00 · 3221 阅读 · 0 评论 -
排序算法-冒泡排序
文章目录1、基本介绍2、冒泡排序过程图解3、 代码实现1、基本介绍冒泡排序(Bubble Sort) 的基本思想是:通过对待排序的序列从前向后(从小标较小的元素开始),一次比较相邻元素的值,如发现逆序则交换,使其较大的元素逐渐从前向后移动,就像水底下的泡泡一样逐渐向上冒。优化:因为排序过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里的优化可以再冒泡排序写好后,在进行)2、冒泡原创 2021-10-14 20:45:00 · 179 阅读 · 0 评论 -
数据结构-递归
文章目录1、递归应用场景2、递归概念3、递归的调用机制4、递归能解决什么问题5、递归需要遵守的重要规则6、递归-迷宫问题7、递归-八皇后问题(回溯算法)1、递归应用场景迷宫问题(回溯)2、递归概念简单的说:递归就是自己调用自己,每次调用时,传入不同的变量。递归有助于解决复杂的问题,同时可以让代码变得整洁3、递归的调用机制使用图解方式说明递归调用机制4、递归能解决什么问题各种数学问题,如:八皇后问题、汉诺塔、阶乘问题、迷宫问题、球和篮子问题各种算法中也是用到了递归,比如 快排、归并排序原创 2021-10-14 20:30:00 · 1302 阅读 · 0 评论 -
数据结构-栈
文章目录1、栈的一个实际需求2、栈的介绍3、栈的应用场景4、栈的快速入门5、栈实现综合计算器(中缀表达式)6、逆波兰计算器7、中缀表达式转为后缀表达式8、逆波兰计算器完整版1、栈的一个实际需求请输入一个表达式计算式:[ 722-5+1-5+3-3 ] 点击计算【如下图】请问:计算机底层是如何运算得到的结果的?2、栈的介绍栈的英文为(Stack)栈是一个先进后出的有序链表栈是限制线性表中元素插入和删除只能在线性表的同一端进行操作。允许插入和删除的一端,为变化的一端,称为栈顶(top),另一原创 2021-10-14 14:46:18 · 319 阅读 · 0 评论 -
数据结构-链表
文章目录1、链表介绍2、单链表的应用实例1、链表介绍链表是有序的列表,但是它在内存中是存储如下✨ 小结上图:链表是以节点的方式来存储,是链式存储每个节点包含 data 域、next 域:指向下一个节点如图:发现链表的各个节点不一定是连续存储链表分带头结点的链表和不带头结点的链表,根据实际需求来确定???? 单链表(带头结点)逻辑结构示意图如下:2、单链表的应用实例使用带 head 头的单向单链表实现 - 水浒英雄排行榜管理完成对英雄的增删改查操作第一种方法在添加英雄时,原创 2021-10-13 16:21:49 · 223 阅读 · 0 评论 -
数据结构-队列
文章目录1、队列介绍2、数组模拟队列思路3、数组模拟环形队列思路1、队列介绍队列是一个有序列表,可以用数组或是链表来实现遵循先入先出的原则 (first in first out,简称“FIFO”)。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)队列的实现同样有两种方式:顺序存储(数组)和链式存储(链表)。本文使用数组实现队列2、数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列的声明如下图,其中 maxSize 是该队列的原创 2021-10-12 14:55:27 · 204 阅读 · 0 评论