摘要:  跳表(SkipList)是一种随机化的数据结构,目前在redis和leveldb中都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表, 就能轻松实现一个 SkipList。 考虑一个有序表: 从该有序表中搜索元素 ,需要比较的次数 阅读全文
posted @ 2018-06-06 22:34 林学徒 阅读(85) 评论(0) 推荐(0) 编辑
摘要:  红黑树由AVL树改进而来,红黑树与AVL都是平衡结构的树。对于AVL树,其每次插入操作都需要从根节点处开始判断该树是否失去平衡,从而做出相应的调整。且其调整过程较为麻烦,每次都需要判断其左右两棵子AVL树的深度情况。相对于红黑树,其将关注点从AVL树的左右两棵子树的深度的失衡 阅读全文
posted @ 2018-06-05 08:47 林学徒 阅读(143) 评论(0) 推荐(0) 编辑
摘要:  常用的图的存储结构主要有两种,一种是采用数组链表(邻接表)的方式,一种是采用邻接矩阵的方式。当然,图也可以采用十字链表或者边集数组的方式来进行表示,但由于不常用,为此,本博文不对其进行介绍。 邻接矩阵   邻接矩阵采用一个n n的二维数组来进行表示(假设该 阅读全文
posted @ 2018-06-04 10:50 林学徒 阅读(221) 评论(0) 推荐(0) 编辑
摘要:问题:如何得到链表中的倒数第k个元素?   一种简单的思路是遍历链表一遍,并统计出链表中节点的数目,然后计算出倒数第k个元素到链表头节点的元素的距离,然后得到对应的结果。但是,我们能否有一种更加简便的方式来得到倒数的第k个元素的结果呢?答案肯定有啦,不然我也不会总结成博文了... 阅读全文
posted @ 2018-06-02 15:31 林学徒 阅读(62) 评论(0) 推荐(0) 编辑
摘要:问题:如何得到一个链表的中间元素?   相信,这个问题对于刚入门编程的人来说,都不会难,最自然而然的想法是先遍历一遍链表,统计链表中的元素的个数,之后,再走一遍链表,所走的步长为链表长度的一半。这样就能获得链表的中间元素的值。但是,我们能不能有一种方法是只走一遍链表便得到结果的呢 阅读全文
posted @ 2018-06-02 14:32 林学徒 阅读(97) 评论(0) 推荐(0) 编辑
摘要:问题:如何判断一个单向链表中是否存在环? 例如: 解题思路:   从一个实际的生活场景出发,两个人,在一个环形的操场上跑步的时候,如果有一个人跑得比另一个人还要快,那么,在n圈之后,这两个人总会在操场上的某个点相遇。将操场类比于链表中存在的环路径,将两个人看成两个指针,那么这道题 阅读全文
posted @ 2018-06-02 14:01 林学徒 阅读(89) 评论(0) 推荐(0) 编辑
摘要:本博文主要用于讲解Hash的应用场景 Hash主要应用于数据结构中和密码学中。 用于数据结构时,主要是为了提高查询的效率,这就对速度比较重视,对抗碰撞不太看中,只要保证hash均匀分布就可以。 在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。 阅读全文
posted @ 2018-05-30 09:17 林学徒 阅读(311) 评论(0) 推荐(0) 编辑
摘要:博文回答一下两个问题: 1. 接口和抽象类的区别 2. 选用接口和抽象类的依据 对于问题1: 1. 从java语法的角度上来说,接口的所有成员和方法都是public的,且其方法均为abstract的。直到jdk1.8之后,接口中的方法才能进行默认的实现。而对于抽象类,其可以有私有的实现,且其可以没有 阅读全文
posted @ 2018-05-29 19:51 林学徒 阅读(109) 评论(0) 推荐(0) 编辑
摘要:  对于单例模式的实现,无论其是否具有懒加载的功能,我们的目标是有且仅生成一个对象。但是,实际上,对于单例模式的一般实现,都会存在着以下的两个问题: 1. 序列化攻击: 对于枚举方式实现的单例模式,并不存在该问题, 对于一般的单例的实现方式,在序列化,又反序列化之后,便不再是同一 阅读全文
posted @ 2018-05-29 08:39 林学徒 阅读(169) 评论(0) 推荐(0) 编辑
摘要:相关介绍:  二叉查找树的查找效率与二叉树的形状有关,对于按给定序列建立的二叉排序树,若其左、右子树均匀分布,则查找过程类似于有序表的二分查找,时间复杂度变为O(log2n)。当若给定序列原来有序,则建立的二叉查找树就蜕化为单链表,其查找效率同顺序查找一样,时间复杂度为O(n)。因此,在构 阅读全文
posted @ 2018-01-17 23:43 林学徒 阅读(824) 评论(0) 推荐(2) 编辑