CC 咖啡猫的工作空间 Coding Space

数据结构与算法

这篇解决什么问题

数据结构决定数据如何组织,算法决定如何处理数据。它们不是刷题专用知识,而是影响程序性能、可读性和扩展性的基础工具。

学完你会掌握

  • 常见数据结构的使用场景。
  • 排序、搜索和遍历的基本思想。
  • 时间复杂度和空间复杂度的意义。
  • 如何在业务代码中选择合适的数据结构。

核心概念

数据结构 特点 常见场景
数组 连续存储,按下标访问快 列表、批量处理
链表 插入删除灵活,随机访问慢 队列、底层结构
栈 后进先出 调用栈、撤销操作
队列 先进先出 任务排队、消息处理
哈希表 按 key 快速查找 字典、缓存、去重
树 层级结构 DOM、文件目录、索引
图 节点和关系 路径、依赖、社交关系

算法关注如何高效完成任务,例如排序、搜索、递归、动态规划、图遍历。

复杂度不是装饰词

复杂度描述的是输入规模变大时,成本如何增长。

复杂度 典型例子 风险
O(1) 哈希表按 key 查询 依赖哈希质量和冲突处理
O(log n) 二分查找、平衡树查询 通常需要有序结构
O(n) 遍历列表 数据大时要控制次数
O(n log n) 常见排序 大多数通用排序可接受
O(n^2) 双重循环比较 数据稍大就可能出问题

复杂度要结合数据规模判断。几十条数据时,清晰简单更重要;几十万条数据时,错误的数据结构会变成真实性能事故。

典型选择

需求 优先考虑
按 ID 快速查找 哈希表
保持插入顺序并遍历 数组或列表
频繁取最大/最小值 堆
表达层级关系 树
表达依赖和路径 图
先进先出处理任务 队列
撤销、括号匹配、调用链 栈

选数据结构时,先说清楚操作模式:查多还是写多,是否要求有序,是否需要范围查询,数据规模多大。

它是怎么工作的

判断一个方案是否合适,常用复杂度描述成本。

O(1)      常数时间
O(log n)  对数时间
O(n)      线性时间
O(n log n) 常见高效排序
O(n^2)    双重循环,数据大时要警惕

复杂度不是唯一标准,但它能帮助你提前发现明显不合理的方案。

开发中的真实场景

业务开发中常见例子:

  • 用哈希表把列表查询从双重循环降为一次遍历。
  • 用队列处理异步任务。
  • 用树结构表示菜单、组织架构、评论楼层。
  • 用图表示依赖关系和流程流转。
  • 用排序和分页处理列表展示。

AI Coding 时代怎么用

AI 很容易写出能跑但低效的代码。你可以要求它:

  • 说明时间复杂度和空间复杂度。
  • 给出数据量增大后的表现。
  • 避免不必要的嵌套循环。
  • 为关键算法补充测试样例。
  • 优先选择业务上可读、可维护的数据结构。

常见误区

误区一:认为算法只和面试有关。实际上,低效列表处理、重复查询、错误缓存结构都会造成真实性能问题。

误区二:总想用复杂算法。大多数业务场景先用清晰的数据结构即可。

误区三:只看时间复杂度,不看数据规模。小数据下简单方案可能更合适。

误区四:认为数据库用了索引就不需要算法思维。索引本身就是数据结构,查询计划也和算法选择有关。

小结

数据结构与算法的核心不是炫技,而是用合适的组织方式和处理方法解决问题。AI 能帮你生成实现,但你需要判断它是否适合当前数据规模和业务场景。