作为一个非CS专业的应届生,在面试的时候经常会被问到关于数据结构中的概念以及算法实现。既然要成为一名程序员,那么掌握数据结构也是无可厚非的,毕竟有着很多的应用与实现。所以自己就整理了一些关于数据结构应该掌握的概念和算法,以及面试常问的问题(实现语言用的Java),有些算法可能手写不出,但思路一定要会,自己也是菜鸟一枚,也在学习。
线性表
线性表的相关概念,对于其中的链表,栈,队列,后面展开介绍。
栈和队
1.栈的创建
2.队列的创建
3.两个栈实现一个队列
4.两个队列实现一个栈
5.设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1)
6.判断栈的push和pop序列是否一致
链表
1、单链表的创建和遍历
2、求单链表中节点的个数
3、查找单链表中的倒数第k个结点(剑指offer,题15)
4、查找单链表中的中间结点
5、合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17)
6、单链表的反转【出现频率最高】(剑指offer,题16)
7、从尾到头打印单链表(剑指offer,题5)
8、判断单链表是否有环
9、取出有环链表中,环的长度
10、单链表中,取出环的起始点(剑指offer,题56)。本题需利用上面的第8题和第9题。
11、判断两个单链表相交的第一个交点(剑指offer,题37)
上个文章中对链表反转的递归方法没给出,这篇有:Java反转单链表实战
排序
1.冒泡排序
2.插入排序
3.选择排序
4.希尔排序
5.快速排序
6.归并排序
7.堆排序
树
1.二叉查找树
二叉查找树(三)之 Java的实现
2.树的深度遍历与广度遍历
树的深度优先遍历和广度优先遍历的原理和java实现代码
3.平衡树
AVL树(三)之 Java的实现
4.红黑树
红黑树原理解析以及Java实现
5.哈夫曼树
哈夫曼树(三)之 Java详解
6.并查集
数据结构--并查集的原理及实现
7.B树系列
B-树,B+树,B*树
图
1.图的基础概念
图的理论基础
2.深度遍历与广度遍历
图的遍历之 深度优先搜索和广度优先搜索
3.单源最短路径
Dijkstra算法(三)之 Java详解
4.多源最短路径
Floyd算法(三)之 Java详解
5.最小生成树
Prim算法(三)之 Java详解
Kruskal算法(三)之 Java详解
6.拓扑排序
拓扑排序(三)之 Java详解
散列查找
1.散列表的概念
散列表
2.散列表的一些算法应用
从头到尾解析Hash表算法
散列表可以和Java中集合HashMap等对照学习。
推荐书籍:《大话数据结构》
《剑指Offer》
【剑指Offer学习】【所有面试题汇总】