
数据结构和算法
慢德
互联网一线金融独角兽在职码农,专注于金融支付领域,定时分享技术和金融知识,不一样的技术人生
+v:ly85360201
展开
-
Queue中方法详解
概念理解有界队列:即队列中的元素个数有限制无界队列:即队列中的元素个数无限制1.向队列中添加元素add():向有界队列中添加元素的时候,如果元素的数量超过临界值,会抛出异常java.lang.IllegalStateException: Queue full测试代码public static void main(String[] args) { ArrayBlockingQueue<Ob...原创 2018-04-26 19:46:03 · 10686 阅读 · 0 评论 -
二进制原码和补码的转换
1.概念理解(注意正数的反码和补码就是原码,负数的补码是反码加1)正数:原码=反码=补码正数举例(数字3):11(原码)=11(反码)=11(补码)负数:原码取反=反码;反码+1=补码负数举例(数字-3):111(原码)->100(反码)->101(补码)(注意第一个1为符号位,0为正,1为负)2.原码和补码转换以-3为例:原码->补码:111(原码)=100(反码)=101(补...原创 2018-06-05 06:08:20 · 19891 阅读 · 0 评论 -
使用LinkList实现LRU
LRU特点1.固定容量,超过容量删除最近最少使用的数据2.新增加的元素,如果存在需要刷新它的生命周期链表实现关键点1.给链表设置一个固定长度,如果超过固定长度,删除链表末尾的元素2.新添加元素,将元素放在链表头3.判断元素是否已存在,如果存在,需要先删除,然后再添加到表头代码实现public class LruTest<E> { private...原创 2019-06-26 20:52:59 · 1240 阅读 · 0 评论 -
自定义单向链表
背景我们知道在java里面有许多数组结构,比如队列,栈等等,但是这些数据结构都是由数组、链表或者树等基本数据结构构造的。所以这里自己定义了一个扩容数组,可以用来扩展成队列或者是栈。public class UniLink<E> { //链表头结点 private Node head; //链表元素个数 private int size;...原创 2019-06-26 19:59:53 · 234 阅读 · 0 评论 -
怎么学习数据结构和算法
1.先叨叨几句说实话,之前代码的时候很少考虑数据结构,一方面是因为写的主要是业务代码,另外一方面是因为很多编程语言都已经封装好了基本的数据结构,拿来即用,最多也就了解基本的一个数组和链表的特点以及效率问题,因为最近重新找工作,也趁着这段时间好好的了解了数据结构这一块,有了深入的了解后,感觉还确实不一样,因为只有了解后,才知道到每种数据结构特点及应用场景,甚至针对特殊场景进行结构优化,当然,一般...原创 2019-07-07 22:32:27 · 926 阅读 · 1 评论 -
先从算法时间复杂度分析开始
1.为什么要进行复杂度分析在编写和使用数据结构和算法的时候,怎么去比较它们之间的优劣,需要一个评判标准,目前主要的分析维度是两方面,时间和空间,什么意思呢,时间复杂度分析就是这个算法在一定的运算量级下的消耗时间,时间越少越优,空间复杂度分析可以看作是占用内存空间的大小,空间越小越优。2.时间复杂度分析大O复杂度表示法如下代码public int sum(int n) { ...原创 2019-07-08 10:18:16 · 289 阅读 · 1 评论 -
java实现单向链表和优化
1.链表的时间复杂度分析查询元素时间复杂度链表是不支持随机访问的,在链表中只有从头节点开始一个一个往下找,找到查询的元素为止,比如链表的长度为n,最好的情况是头节点就是需要找的元素,那么就是一个时间单元1*unit_time,,最坏的情况是最后一个节点是需要找的元素,那么就是n*unit_time,那么平均时间复杂度就是n/2*unit_time;根据大O推导出,时间复杂度为O(n);...原创 2019-07-08 16:13:55 · 504 阅读 · 0 评论 -
java实现二分搜索树
二分搜索树的特点1.二分搜索树的每一个节点的值大于其左子树的所有节点的值,并且小于其右子树的所有节点的值2.每一颗子树也是二分搜索树3.因为它的存储是有序的,存储的元素必须具有可比较性树结构的遍历方法前序遍历:先遍历根结点,再遍历左子树,最后遍历右子树。中序遍历:先遍历左子树,再遍历根结点,最后遍历右子树,遍历结果从小到大有序排列后序遍历:先遍历左子树,再遍历右子...原创 2019-06-27 21:28:23 · 160 阅读 · 0 评论 -
链表实现栈结构及应用场景描述
1.栈的特点仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。如果用链表实现栈,怎么利用链表去做呢,我们可以把链表头看成栈顶,链尾堪称栈底,添加元素的时候,元素添加到链表头,删除的时候,删除链表头即可。2.代码实现2.1先构建一个链表实现,方便自定义链表的操作代码如下,具体实现可参考上篇文章public class StackBaseLink&l...原创 2019-07-08 23:37:28 · 1018 阅读 · 0 评论