一、数组(Array)
-
数组的特点是什么?
-
数组的时间复杂度分析(查找、插入、删除)?
-
如何实现动态数组?
-
如何在数组中查找重复元素?
-
如何在有序数组中查找元素?
-
如何旋转数组?
-
如何合并两个有序数组?
-
如何找到数组中的最大/最小值?
-
如何找到数组的中位数?
-
稀疏数组的存储与应用场景?
二、链表(Linked List)
-
单链表与双链表的区别?
-
链表的时间复杂度分析?
-
如何反转链表?
-
如何合并两个有序链表?
-
如何检测链表是否有环?
-
如何找到链表的中间节点?
-
如何删除链表的倒数第 N 个节点?
-
如何在链表中实现插入与删除?
-
跳表的原理与应用场景?
-
链表与数组的优缺点对比?
三、栈(Stack)与队列(Queue)
栈
-
栈的特点是什么?
-
栈的应用场景有哪些?
-
如何用数组实现栈?
-
如何用链表实现栈?
-
如何用两个栈实现队列?
-
如何用栈实现括号匹配?
-
单调栈的原理与应用?
队列
-
队列的特点是什么?
-
普通队列与循环队列的区别?
-
如何用数组实现队列?
-
如何用链表实现队列?
-
双端队列(Deque)的原理与应用?
-
优先队列的原理与应用?
-
单调队列的原理与应用?
四、哈希表(Hash Table)
-
哈希表的原理是什么?
-
哈希函数的设计原则?
-
哈希冲突的解决方法有哪些?
-
开放地址法与链地址法的区别?
-
哈希表的时间复杂度分析?
-
如何实现 LRU 缓存?
-
布隆过滤器(Bloom Filter)的原理与应用?
-
哈希表与数组、链表的区别?
五、树(Tree)
基础
-
树的基本概念(高度、深度、度)?
-
二叉树的遍历方式有哪些?
-
如何实现前序、中序、后序遍历?
-
如何实现层序遍历?
-
满二叉树、完全二叉树的区别?
二叉搜索树(BST)
-
BST 的特点是什么?
-
BST 的查找、插入、删除的时间复杂度?
-
如何判断一棵树是否是 BST?
-
如何找到 BST 的第 K 小元素?
-
BST 的平衡性问题?
平衡树
-
AVL 树的原理与特点?
-
红黑树的原理与特点?
-
红黑树的旋转操作?
-
B 树与 B+ 树的区别?
-
B+ 树在数据库索引中的应用?
其他树结构
-
字典树(Trie)的原理与应用?
-
线段树(Segment Tree)的原理与应用?
-
树状数组(Fenwick Tree)的原理与应用?
-
并查集(Union-Find)的原理与应用?
六、图(Graph)
-
图的存储方式(邻接矩阵、邻接表)?
-
有向图与无向图的区别?
-
带权图与无权图的区别?
-
深度优先搜索(DFS)的原理与实现?
-
广度优先搜索(BFS)的原理与实现?
-
拓扑排序的原理与实现?
-
最短路径算法(Dijkstra、Bellman-Ford、Floyd-Warshall)?
-
最小生成树算法(Prim、Kruskal)?
-
图的连通性判断?
-
图的环检测方法?
七、堆(Heap)
-
堆的特点是什么?
-
最大堆与最小堆的区别?
-
堆的插入与删除操作?
-
堆排序的原理与实现?
-
优先队列与堆的关系?
-
如何用堆实现 Top K 问题?
-
如何用堆实现中位数查找?
八、跳表(Skip List)
-
跳表的原理是什么?
-
跳表的时间复杂度分析?
-
跳表的插入与删除操作?
-
跳表与平衡树的对比?
-
跳表在 Redis 中的应用?
✅ 总结
这份清单基本覆盖了 数据结构篇的所有常见面试题,从数组、链表、栈队列、哈希表到树、图、堆、跳表都有涉及。
建议你复习时:
-
先掌握数组、链表、栈队列、哈希表 → 高频且基础。
-
再学习树、图、堆 → 面试加分项。
-
最后补充跳表与高级数据结构 → 提升竞争力。