![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法——数据结构
文章平均质量分 74
Star_Ship
方向确定,继续前进。
展开
-
二叉树的应用——表达式树的原理分析与实现(Java语言)
表达式树表达式树(expression tree)的树叶是操作数(operand),如常量或变量名,而其他节点为操作符(operator)。如下图 图1 (a+b*c)+((d*e+f)*g)的表达式树 我们可以通过递归地产生一个带括号的左表达式,然后打印出在跟出的运算符,最后再递归地产生一个带括号的右表达式从而得到一个中缀表达式。这种一般的方法(左,节点,右)的方式成为中序遍历。构造表达式原创 2017-12-03 17:16:09 · 8475 阅读 · 0 评论 -
Java集合之WeakHashMap、IdentityHashMap、EnumMap简介
转载自:https://blog.csdn.net/wxc880924/article/details/52683097WeakHashMapWeakHashMap与HashMap的用法基本类似。区别:HashMap的key保留了对实际对象的强引用,这意味着只要HashMap对象不被销毁,还HashMap的所有key所引用的对象就不会被垃圾回收,HashMap也不会自动删除这...转载 2018-04-06 15:41:59 · 203 阅读 · 0 评论 -
数据库为什么使用B+树而不是B树
B树和B+树的区别B树和B+树的区别主要有两点:在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值。叶子节点同时存放键和值B+树的叶子节点有一条链相连,而B+树的叶子节点各自独立。B树与B+树的对比示意图使用B+树的好处由于B+树的内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快地缩小查找范围...原创 2018-04-05 12:01:49 · 3438 阅读 · 0 评论 -
HashMap与HashTable的哈希算法——JDK1.9源码阅读总结
HashTable中的哈希算法下面是HashTable源码中的put方法:public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerExceptio...原创 2018-04-04 12:42:03 · 828 阅读 · 0 评论 -
Java(JDK1.9)集合框架归纳总结——Map接口继承体系
注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Map接口实现概述Map的实现体系中,常用的类和接口可以大致分为三层。下面一一说明这些类或接口的特点和作用。第一层第一层包含一个抽象类AbstractMap和一个接口SortedMap。AbstractMap...原创 2018-04-07 15:42:56 · 1246 阅读 · 1 评论 -
《剑指offer》Java实现——每天9题——第4天
面试题28 对称的二叉树 请实现一个函数,用来判断一颗二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。测试用例功能测试(对称的树;因结构而不对称的二叉树;结构对称但节点值不对称的二叉树)特殊值测试(树为null;树只有一个根节点;所有节点值都相同的树)实现代码/** * 入口方法,负责进行参数校验和递归调用 * @p...原创 2018-03-05 21:14:49 · 384 阅读 · 0 评论 -
《剑指offer》Java实现——每天9题——第3天
面试题19 正则表达式匹配 请实现一个函数用来匹配包含’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”和“ab*a”均不匹配。测试样例功能测试(模式字符串里包含普通字符、’.’、’*’;...原创 2018-03-04 21:16:10 · 418 阅读 · 0 评论 -
《剑指offer》Java实现——每天9题——第2天
面试题10 斐波那契数列 题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契数列的第n项。测试用例功能测试(如输入3、5、10)边界值测试(如输入0,1,2)性能测试(输入较大的数字,如40、50、100等)实现代码/** * 求斐波拉契数列的第n项。 * @param n 第n项 * @return 第n项的值 */ pub原创 2018-03-03 22:18:08 · 443 阅读 · 0 评论 -
《剑指offer》Java实现——每天9题——第1天
面试题1 赋值运算符函数该题目涉及到c++语言的指针特性,java语言暂没想出解决方案。面试题2 实现Singleton模式 设计一个类,我们只能生成该类的一个实例。实现代码 public class LazyLoadedSingleton{ private LazyLoadedSingleton{} //private构造方法,防止外部实例化...原创 2018-03-02 20:47:32 · 1640 阅读 · 0 评论 -
《剑指offer》Java实现——每天9题——第6天
面试46 把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,……,11翻译成“l”,……,25翻译成“z”。一个数字可能有多个翻译。例如,12258有5种翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。测试用例功能测试(只有1位数字...原创 2018-03-09 09:39:23 · 470 阅读 · 1 评论 -
图论——图的邻接表实现——Java语言(完整demo)
一、图的实现方式概述1、图的简单实现方法——邻接矩阵表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法。 对于每条边(u,v),置A[u,v]等于true;否则,数组的元素就是false。如果边有一个权,那么可以置A[u][v]等于该权,而使用一个很大或者很小的权来标记不存在的边。虽然这样表示非常简单,但是,它的空间需求则为θ...原创 2018-02-28 17:34:56 · 6877 阅读 · 4 评论 -
《剑指offer》Java实现——每天9题——第5天
面试题37 序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树测试用例功能测试(树有多个节点;树只有一个节点;每个节点只有左子树或者右子树;反序列化时序列为空,或者null)特殊值测试(树为空)实现代码//一个全局的计数变量,用于反序列化计数 private static int index=0; /** * 序列化...原创 2018-03-06 22:41:07 · 362 阅读 · 0 评论 -
排序算法——快速排序的图解、代码实现以及时间复杂度分析
快速排序在C++的泛型排序中,拷贝对象需要很大的开销,而比较对象常常是相对省时的(编译器的自动优化)。在这种情况下,如果我们能够使用更少的数据移动,那么有理由让一个算法多使用一些比较。而快速排序(Quicksort)满足了这种特点,实际上C++中通常所使用的排序例程就是使用的快速排序。 快速排序也是一种分治的递归算法。它的平均运行时间是O(NlogN),最坏情形性能为O(N2)。经典快速排序将数组原创 2018-02-26 13:19:33 · 3088 阅读 · 0 评论 -
数据结构之——“优先队列”的理论基础知识(Java语言)
优先队列一、什么是优先队列?在实际应用中,以打印机为例,有的作业虽然排在后面,但很重要,需要优先打印,这种带有优先级的队列,叫做优先队列(priority queue)。 优先队列是允许至少下面两种操作的数据结构:insert(插入)deleteMin(删除最小者):找出、返回并删除优先队列中最小的元素。优先队列的应用场景:操作系统、外部排序算法、贪婪算法……二原创 2018-01-15 17:15:01 · 813 阅读 · 0 评论 -
排序算法——希尔排序的图解、代码实现以及时间复杂度分析
希尔排序(Shellsort)希尔排序是冲破二次时间屏障的第一批算法之一。 希尔排序通过比较相距一定间隔的元素来工作;各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。由于这个原因,希尔排序有时也叫做缩减增量排序。 希尔排序使用一个序列h1,h2,…,hi,这个序列叫做增量序列(increment sequence)。增量序列只要求h1=1,以及hi>hi-1。原创 2018-01-22 19:04:21 · 9083 阅读 · 1 评论 -
排序算法——插入排序的图解、代码实现以及时间复杂度分析
插入排序插入排序的原理: 插入排序由N-1躺排序完成,对于p=1到N-1躺,插入排序保证从位置0到位置p的元素为已排序状态。 插入排序的代码实现: /** * 插入排序的实现例程,特点是使用了泛型,可以接受任何实现了Comparable接口的类, * 并且使用了一种巧妙的方法避免了交换操作。 * @param a 需要排序的数组 *原创 2018-01-21 15:47:25 · 2336 阅读 · 0 评论 -
二叉堆建堆的优化算法原理图解及代码实现
二叉堆的简单建堆方法有时二叉堆是由一些项的初始结合构造而得。这种构造方法以N项作为输入。 最浅显的建堆方式,可以通过N个连续的insert操作(Williams’ method)来完成,由于每个insert将花费O(logN)时间,因此建堆的最坏运行时间是O(NlogN)。但是这种建堆的方式并不是最优算法。二叉堆的优化建堆方法更快速算法是,将N项以任意顺序放入树中,保持结构特性。原创 2018-01-20 18:22:26 · 4016 阅读 · 1 评论 -
Java(JDK1.9)集合框架归纳总结——Collection接口的第三层——应用层
注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK Collection接口的第三层——应用层&具体实现应用层就是各个抽象类、底层接口的具体实现,使我们实际使用的各种容器和工具类,如ArrayList、Vector、HashSet、TreeSet等。结构图如下:...原创 2018-04-07 12:53:53 · 701 阅读 · 0 评论