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 能帮你生成实现,但你需要判断它是否适合当前数据规模和业务场景。