跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

数据结构基础:增删查操作与选择

数据结构基本操作涵盖查找、新增和改动。以统计数组元素出现次数为例,对比数组与字典在时间复杂度上的表现。字典利用键值对实现 O(1) 查找,显著降低整体复杂度至 O(n)。设计数据结构需先分析数据处理流程,识别耗时操作,再选择合适结构。掌握增删查逻辑有助于针对复杂问题设计最优解决方案,平衡空间与时间损耗。

剑仙发布于 2021/4/9更新于 2026/6/226 浏览
数据结构基础:增删查操作与选择

要想灵活使用数据结构,需要先弄清楚数据在代码中被处理、加工的最小单位动作,也就是数据结构的基本操作,有了这些动作之后,就可以基于此去选择更合适的数据结构了

增删查:掌握数据处理的基本操作,以不变应万变

代码对数据的处理示例

在一个数组中找出出现次数最多的那个元素的数值。例如,输入数组 a = [1,2,3,4,5,5,6] 中,只有 5 出现了两次,其余都是 1 次。显然 5 出现的次数最多,则输出 5。为了降低时间复杂度,引入了键值对的字典数据结构。

为什么使用对象的 Key-Value 结构?

代码处理数据的核心思路是:

  • 第一步,根据原始数组计算每个元素出现的次数;
  • 第二步,根据第一步的结果,找到出现次数最多的元素。

首先,我们来分析第一步统计出现次数的处理。此时,你还不知道应该采用什么数据结构。

对于每一次的循环,你得到了输入数组中的某个元素 a[i]。接着,你需要判断这个元素在未知的数据结构中是否出现过:

  • 如果出现了,就需要对出现的次数加 1。
  • 如果没有出现过,则把这个元素新增到未知数据结构中,并且把次数赋值为 1。

这里的数据操作包括以下 3 个。

  • 查找:看能否在数据结构中查找到这个元素,也就是判断元素是否出现过。
  • 新增:针对没有出现过的情况,新增这个元素。
  • 改动:针对出现过的情况,需要对这个元素出现的次数加 1。

接下来,我们一起分析第二步。访问数据结构中的每个元素,找到次数最多的元素。这里涉及的数据操作很简单,只有查找。

这段代码需要高频使用查找的功能。此时,第一步的查找动作嵌套在 for 循环中,如果你的代码不能在 O(1) 的时间复杂度内完成,则代码整体的时间复杂度并没有下降。而能在 O(1) 的时间复杂度内完成查找动作的数据结构,只有字典类型。这样,外层 for 循环是 O(n) 的时间复杂度,内部嵌套的查找操作是 O(1) 的时间复杂度。整体计算下来,就仍然是 O(n) 的时间复杂度。字典的查找是通过键值对的匹配完成的,它可以在 O(1) 时间复杂度内,实现对数值条件查找。

现在,我们换个解决方案。假设采用两个数组,分别按照对应顺序记录元素及其对应的出现次数。数组对于元素的查找只能逐一访问,时间复杂度是 O(n)。也就是说,在 O(n) 复杂度的 for 循环中,又嵌套了 O(n) 复杂度的查找动作,所以时间复杂度是 O(n²)。因此,这里的数据结构,只能采用字典类型。

数据处理的基本操作

不管是数组还是字典,都需要额外开辟空间,对数据进行存储。而且数据存储的数量,与输入的数据量一致。因此,消耗的空间复杂度相同,都是 O(n)。由前面的分析可见,同样采用复杂的数据结构,消耗了 O(n) 的空间复杂度,其对时间复杂度降低的贡献有可能不一样。因此,我们必须要设计合理的数据结构,以达到降低时间损耗的目的。

而设计合理的数据结构,又要从问题本身出发,我们可以采用这样的思考顺序:

  • 首先我们分析这段代码到底对数据先后进行了哪些操作。
  • 然后再根据分析出来的数据操作,找到合理的数据结构

就把数据处理的基本操作梳理了出来,遇到更复杂的问题,无非就是这些基本操作的叠加和组合。只要按照上述的逻辑进行思考,就可以轻松设计出合理的数据结构。

代码对数据处理的操作类型非常少。代码对数据的处理就是代码对输入数据进行计算,得到结果并输出的过程。数据处理的操作就是找到需要处理的数据,计算结果,再把结果保存下来。这个过程总结为以下操作:

  1. 找到要处理的数据。这就是按照某些条件进行查找。
  2. 把结果存到一个新的内存空间中。这就是在现有数据上进行新增。
  3. 把结果存到一个已使用的内存空间中。这需要先删除内存空间中的已有数据,再新增新的数据。

经过对代码的拆解,你会发现即便是很复杂的代码,它对数据的处理也只有这 3 个基本操作,增、删、查。只要你围绕这 3 个数据处理的操作进行分析,就能得出解决问题的最优方案。常用的分析方法可以参考下面的 3 个步骤:

  • 首先,这段代码对数据进行了哪些操作?
  • 其次,这些操作中,哪个操作最影响效率,对时间复杂度的损耗最大?
  • 最后,哪种数据结构最能帮助你提高数据操作的使用效率?

这 3 个步骤构成了设计合理数据结构的方法论。

数据操作与数据结构的案例

查找,就是从复杂的数据结构中,找到满足某个条件的元素。通常可从以下两个方面来对数据进行查找操作:

目录

  1. 增删查:掌握数据处理的基本操作,以不变应万变
  2. 代码对数据的处理示例
  3. 数据处理的基本操作
  4. 数据操作与数据结构的案例
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 深入理解 MySQL 索引:核心原理与实战优化指南
  • Nginx 入门详解:从基础配置到高性能实战
  • OpenClaw 接入自定义模型并通过 WebUI 实现智能操作
  • Python 异步编程与协程详解
  • Linux 内核虚拟网络设备驱动示例 vnet
  • 龙虾机器人(OpenClaw)本地部署完全技术指南
  • SQL Server 2019 安装与配置指南
  • N46Whisper:基于 Whisper 的日语语音转字幕工具
  • OpenClaw 系列 16 款 AI Agent 工具选型指南
  • Python logging 模块:makeLogRecord 函数解析与应用
  • 从 Webhook 到 AI Agent:钉钉周报提醒机器人演进
  • 基于Vivado的AD9680 FPGA测试程序开发:1G采样率与Lane4配置
  • OpenREALM:无人机实时映射框架的技术深度解析
  • 利用腾讯云 HAI 与 DeepSeek 快速构建个人网页
  • AI Agent 架构:基础组成模块深度解析
  • Python 环境安装与配置 Gurobi 求解器指南
  • 法律领域自然语言处理(NLP)应用与实战指南
  • C++ 性能优化实战:从内存管理到 CPU 指令的效率提升
  • 前端状态管理对比:如何选择合适的方案
  • B 站 PC 网页版自动开启字幕脚本(2026 适配)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online