Java数据结构与算法之学习路线

目录:
1.前言
2.数据结构与算法学习大纲(粗糙)
3.线性结构分类
4.各个线性类型数据结构的特点以及使用场景
5.数组与队列的区别

1.前言:
昨天去面试了一家我觉得薪资和公司文化都不错的公司,也不知道是天真还是没得自知之明,一个普通本科去跟人家985,211高校的
竞争,哎,就想着试试,喜欢就上嘛,然后就去了。去做了两道面试题,全是数据结构和算法的题,由于我的java和android都是自学的
当初基础也打的不牢靠,所以第一道我就懵逼了,整了大半个钟头才搞出来,说多了全是泪。别说这类B轮的公司了,就是一线的BAT这些
大型公司算法题也是面试题中的常客,反而上层的框架啊这些倒是没怎么考,所以回来以后我就决定一定要从新学习一下数据结构和算法,
不说学精通,至少要有所进步吧,好了不说了,不然泪满襟了。

2.数据结构与算法学习大纲(粗糙)
Java数据结构与算法之学习路线_第1张图片

3.线性结构分类

Java数据结构与算法之学习路线_第2张图片

4.各个线性类型数据结构的特点以及使用场景

数组:
特点:元素在内存中线性连续存储,可以根据下标快速访问数组元素,但是增删效率不是很高,每一次增加或删除元素都需要
大量移动元素空出插入位置或者填补删除元素的位置。

使用场景:频繁查询,很少进行增加或删除操作的情况

链表:
特点:存储可以不连贯,根据索引将数据联系起来,当查询元素的时候需要从开头开始去查询,所以效率比较低,然而增加或删除
元素的时候只需要修改索引就可以了。

使用场景:少查询,需要频繁插入或删除的情况

队列:
特点:先进先出(FIFO/fisrt in first out),如同一个单向隧道,先进的车先出。

使用场景:多线程的阻塞队列管理非常有用

栈:
特点:后进先出(LIFO/last in first out),就像一个箱子,先放进去的东西在底部,需要先拿出上面的东西,下面的东西才能拿出来

使用场景:实现递归以及表达式计算,android运用栈的原理实现back stack

5.数组与链表的区别
(1)数组连续,链表不连续
(2)数组内存静态分配,链表内存动态分配
(3)数组查询时间复杂度为O(1),链表为0(n)
(4)数组增加删除的时间复杂度为O(n),链表为O(1)

(5)数组从栈中分配空间,链表从堆中分配空间


文章:

Java数据结构与算法之学习路线

Java数据结构与算法之Array数组

Java数据结构与算法之LinkedList单链表

Java数据结构与算法之Queue队列

Java数据结构与算法之stack栈



你可能感兴趣的:(JAVA)