跳转至

数据结构与算法概述

什么是数据结构与算法

数据结构是组织和存储数据的方式。数组、链表、栈、队列、树、图、哈希表——每种数据结构都有自己的特点,适合不同的场景。

算法是解决问题的步骤。排序、搜索、遍历、动态规划、贪心——每种算法都是针对一类问题的通用解法。

为什么要学数据结构与算法

编程的基本功。 数据结构和算法是所有编程任务的基础。不会数据结构,你可能用一个列表去实现本该用哈希表完成的任务,性能差几个数量级。

面试的核心考核。 大厂技术面试中,算法题是必考项。LeetCode 上刷几百道题几乎是求职标配。

培养计算思维。 学算法不只是学具体的解题技巧,更是培养分解问题、抽象建模、分析复杂度的思维方式。

理解 AI 和底层系统。 搜索引擎用图算法,数据库用 B+ 树,编译器用语法树,推荐系统用图和矩阵运算。

核心知识模块

基础数据结构

  • 数组与链表:连续存储 vs 指针链接,随机访问 vs 顺序访问
  • 栈与队列:后进先出(LIFO)vs 先进先出(FIFO)
  • 哈希表:键值映射,冲突处理,O(1) 平均查找
  • 树:二叉树、二叉搜索树、AVL 树、红黑树
  • 图:邻接矩阵 vs 邻接表,有向图 vs 无向图

基础算法

  • 排序:冒泡、选择、插入、归并、快排、堆排序
  • 搜索:线性搜索、二分搜索、BFS、DFS
  • 递归:递归思维、递归转迭代

高级主题

  • 动态规划:最优子结构、重叠子问题、状态转移方程
  • 贪心算法:局部最优到全局最优的条件
  • 分治法:大问题拆成小问题,分别解决再合并
  • 图算法:最短路径(Dijkstra、Floyd)、最小生成树(Prim、Kruskal)、拓扑排序
  • 高级数据结构:堆、并查集、线段树、Trie 树

复杂度分析

  • 时间复杂度:O(1)、O(log n)、O(n)、O(n log n)、O(n^2)
  • 空间复杂度:算法需要多少额外内存
  • 最好/最坏/平均情况:不同输入下的性能差异

怎么学

先学基础数据结构,再学算法。 数据结构是算法的载体。不理解链表,就很难理解链表排序。

刷题是必须的,但要带着思考刷。 每道题做完后,问自己:这道题用了什么数据结构?什么算法?时间复杂度是多少?

按专题刷,不要随机刷。 先把数组和字符串的题刷完,再刷链表,再刷树,再刷动态规划。

画图辅助理解。 链表的指针变化、树的旋转、图的遍历——画图比纯文字高效得多。

本模块资源

资源 类型 说明
Berkeley CS61B 课程 Berkeley 数据结构课程,Java 实验
MIT 6.006 课程 MIT 算法入门课
Princeton Algorithms 课程 Princeton 算法课程,Sedgewick 主讲
VisuAlgo 工具 数据结构和算法可视化