随笔分类 -  数据结构java版本

用java实现数据结构
摘要:二叉排序树java实现 二叉树排序树是什么? 二叉排序树(Binary Sort Tree)又称二叉查找树、二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 左、右子树 阅读全文
posted @ 2020-01-17 20:29 梦小冷 阅读(1346) 评论(0) 推荐(1)
摘要:顺序数组实现二叉树 实现原理 对于下标为index的节点其满足 1.左孩子节点的下标为2index+1 2.右孩子节点的下标为2index+2 代码实现 主要应用 堆排序 阅读全文
posted @ 2019-11-11 19:39 梦小冷 阅读(1325) 评论(0) 推荐(0)
摘要:哈希表的java实现 什么是哈希表? 1.哈希表是通过关键码key来直接进行访问的一种数据结构 2.也就是它通过关键码来值映射到表中的一个位置来访问记录,进而加快访问的速度 3.存放记录的数组叫做散列表(哈希表) 哈希表的根据解决冲突方式不同分为的两种样式 1.分离链接法 2.线性探测法 散列函数 阅读全文
posted @ 2019-10-31 13:19 梦小冷 阅读(1610) 评论(0) 推荐(0)
摘要:斐波那契查找算法 什么是斐波那契查找算法? 1.黄金分割点是把一条线段分割成两个部分,使得一部分与全长之比等于另一部分与这一部分之比,取其前三位的近似值大概是0.618。 2.斐波那契数列{1,1,2,3,5,8,13,...}两个相邻数的比例无限接近0.618 斐波那契思想 1.斐波那契思想与二分 阅读全文
posted @ 2019-10-28 21:24 梦小冷 阅读(2848) 评论(0) 推荐(1)
摘要:插值查找算法 算法思想 假如有一本英文的字典,你现在要查找apple这个单词,你肯定不会一页页去翻,也不会从中间去翻,你肯定会去前边翻,因为你知道字典是有序的,从A Z,已知A在前面,所以你一定会去前面翻 同样的,对于一个值均匀增长的一个数组来说,已知一个值的大小,我们就可以按照值的分布规律来猜测它 阅读全文
posted @ 2019-10-26 21:38 梦小冷 阅读(287) 评论(0) 推荐(0)
摘要:二分查找 思想 首先数组必须是有序的 对于一个有序的数组,那么其中值一定位于中间的位置,我们拿待查找的值与中间的值进行比较 如果待查找的值比中间值小,那么就去中间值的左边进行查找,否则就去中间值的右边查找 这样最左边的值到中间值的前一个值这一段或者是中间值的后一个值到最后一个值这一段,又可以看做是一 阅读全文
posted @ 2019-10-25 19:58 梦小冷 阅读(200) 评论(0) 推荐(0)
摘要:堆排序 什么是堆? 堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆 或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 如下图所示: 那么话又说回来了,什么是完全二叉树呢? 要想知道什么是完全二叉树,首先得知道什么满二叉树。 满二叉树 :高度为h,并 阅读全文
posted @ 2019-10-24 18:19 梦小冷 阅读(176) 评论(0) 推荐(0)
摘要:基数排序 思想 通过按照键值的各个位的值,把要排序的元素分配到某些桶中,最终实现排序的效果。 将所有待比较的数值统一为同样的数位长度,数位较短的数的前面补充零。 从低位开始依次进行排序,这样从最低位排序到最高位排序完成之后,整个序列就变成了一个有序的序列。 示意图 特点 稳定性排序 基数排序是桶排序 阅读全文
posted @ 2019-10-22 21:29 梦小冷 阅读(183) 评论(0) 推荐(0)
摘要:归并排序 思路 1.归并排序采用了分而治之的策略 2.首先向将整个序列两两划分,在递归地分别对这个序列的左边和右边两两划分,这样直到最小序列为单个元素 3.之后再序列与序列之间两两归并成有序的序列,直到整个序列有序 示意图 拆分序列 合并相邻有序的子序列 "转载自https://www.cnblog 阅读全文
posted @ 2019-10-21 20:58 梦小冷 阅读(130) 评论(0) 推荐(0)
摘要:快速排序 思路 1.对于一个数组,首先先选择一个基准值key,这个基准值可以随意选,但是一般选择的是这个数组的第一个元素a[0] 2.之后我们对于这个数组,把数组中所有比这个基准值key小的元素向基准值key的左边扔,把数组中所有比这个基准值key大的元素朝基准值key的右边扔 3.这样的话基准值k 阅读全文
posted @ 2019-10-20 20:13 梦小冷 阅读(605) 评论(0) 推荐(0)
摘要:希尔排序 什么是希尔排序? 希尔排序的本质就是分组插入排序 希尔排序的思想 将整个待排元素序列分割成若干个子序列 对子序列进行插入排序 依次缩减增量再次进行排序 这样往复直到整个序列元素基本有序(其实也就是增量足够小的时候) 再对整个序列进行一次直接插入排序,这次排序是在整个序列基本有序的状态,接近 阅读全文
posted @ 2019-10-17 22:32 梦小冷 阅读(121) 评论(0) 推荐(0)
摘要:插入排序 思路 1.首先对于a[0]这个单个元素来说其自己就是有序的,所以要从a[1]开始 2.第二步是把a[1]这个元素插入a[0]这个列表中 3.如果a[0]比a[1]大的话,a[0]应该给a[1]位置,a[1]=a[0],那么a[0]朝后面移动了一个位置,这样a[1]就可以放到它应有的位置也就 阅读全文
posted @ 2019-10-13 21:35 梦小冷 阅读(119) 评论(0) 推荐(0)
摘要:选择排序 思路 1.一开始的时候,整个数组是无序的,我们遍历数组找到最小的值,将这个最小的值放到它应该放的位置也就是a[0] 2.接着我们再从a[1]到a[n]中继续遍历找到最小的值,并将它放到正确的地方a[1] 3.这样a[0],a[1]就是有序的了 4.我们在循环这样的过程从a[i] a[n]中 阅读全文
posted @ 2019-10-12 20:45 梦小冷 阅读(128) 评论(0) 推荐(0)
摘要:冒泡排序 思路 1.依次对数组中每对相邻的元素比对,如果前者比后者大,那么它们就交换位置,这样一趟下来总能把一个最大元素送到末尾的位置 2.可以这么说,每一趟排序进行之后使得数组后面的有序部分规模在增大,前面的无序部分规模在减小 3.经过这样多次交换之后数组就有序了 代码 阅读全文
posted @ 2019-10-11 22:22 梦小冷 阅读(130) 评论(0) 推荐(0)
摘要:排序的分类 内部排序 在内存中排序 外部排序 数据量过大,需要借助外存 时间复杂度以及是否稳定 阅读全文
posted @ 2019-10-11 21:53 梦小冷 阅读(214) 评论(0) 推荐(0)
摘要:八皇后问题 问题 1.8乘8的棋盘上 2.摆放8个皇后 3.任意两个皇后不能同行、同列、同对角线 4.问多少种摆放方法 思路 1.第一个皇后放在第一列 2.第二个皇后放在第二列,判断是否相互攻击,如果攻击依次放在第二列、第三列、依次把所有列都放完,找到一个合适的 3.继续第三个皇后,还有第一列、第二 阅读全文
posted @ 2019-10-10 19:30 梦小冷 阅读(157) 评论(0) 推荐(0)
摘要:迷宫问题 整体问题 判断从起点能否走到终点,如果可以打印出来路径 思路 1.创建迷宫 2.设置起点和终点 3.如果走到终点退出递归 4.如果这个点没走过,假设它可以走通,递归的对它的四个方向走,如果通就返回true,四个方向都不通就返回false 5.如果这个点走过,就不能再走,直接返回false 阅读全文
posted @ 2019-10-09 20:18 梦小冷 阅读(184) 评论(0) 推荐(0)
摘要:递归 什么是递归 递归就是自己调用自己,每次调用传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得更加简洁 递归执行过程 1.当程序执行到一个方法的时候,就会开辟一个新的栈 2.每个空间的局部变量是独立的 递归的案例 递归解决什么问题 1.8皇后、汉诺塔、阶乘、二分查找、迷宫等问题 阅读全文
posted @ 2019-10-09 19:42 梦小冷 阅读(180) 评论(0) 推荐(0)
摘要:计算器代码 阅读全文
posted @ 2019-10-07 13:52 梦小冷 阅读(953) 评论(0) 推荐(0)
摘要:中缀表达式实现简单计算器 思路分析 1.定义两个栈,一个是数栈,另外是一个符号栈 2.设置优先级别的判断,乘除优先级要大于加减优先级 3.定义一个函数,处理两个操作数和一个运算符的运算符的运算结果 4.逐个扫描输入的中缀表达式,如果是数字就入数栈,如果是运算符的话就考虑其与符号栈顶的运算符的优先级谁 阅读全文
posted @ 2019-10-06 14:23 梦小冷 阅读(483) 评论(0) 推荐(0)