在面试的时候经常会被问到关于数据结构中的概念以及算法实现。既然要成为一名程序员,那么掌握数据结构也是无可厚非的,毕竟有着很多的应用与实现。所以自己就整理了一些关于数据结构应该掌握的概念和算法,以及面试常问的问题(实现语言用的Java),有些算法可能手写不出,但思路一定要会,自己也是菜鸟一枚,也在学习。
线性表
线性表的相关概念,对于其中的链表,栈,队列,后面展开介绍。
栈和队
- 栈的创建
- 队列的创建
- 两个栈实现一个队列
- 两个队列实现一个栈
- 设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1)
- 判断栈的push和pop序列是否一致
链表
- 单链表的创建和遍历
- 求单链表中节点的个数
- 查找单链表中的倒数第k个结点(剑指offer,题15)
- 查找单链表中的中间结点
- 合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17)
- 单链表的反转【出现频率最高】(剑指offer,题16)
- 从尾到头打印单链表(剑指offer,题5)
- 判断单链表是否有环
- 取出有环链表中,环的长度
- 单链表中,取出环的起始点(剑指offer,题56)。本题需利用上面的第8题和第9题。
- 判断两个单链表相交的第一个交点(剑指offer,题37)
排序
1.冒泡排序
2.插入排序
3.选择排序
4.希尔排序
5.快速排序
6.归并排序
7.堆排序
树
- 二叉查找树
- 树的深度遍历与广度遍历
- 平衡树
- 红黑树
- 哈夫曼树
- 并查集
- B树系列
图
- 图的基础概念
- 深度遍历与广度遍历
- 单源最短路径
- 多源最短路径
- 最小生成树
- 拓扑排序
散列查找
1.散列表的概念
2.散列表的一些算法应用
散列表可以和Java中集合HashMap等对照学习。
推荐书籍:《大话数据结构》
自己是从事了七年开发的Android工程师,不少人私下问我,2019年Android进阶该怎么学,方法有没有?
没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想进阶提升Android开发,却又不知道怎么进阶学习的朋友。【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
网友评论