数据结构与算法,这4种结构写代码时每天都在用
很多初学者觉得数据结构与算法是面试造火箭工作拧螺丝的东西。实际上日常写代码的过程中你时时刻刻都在和数据结构和算法打交道只是没有意识到而已。这篇文章不讲红黑树、B树这些复杂结构就说说工作中最常用的4种数据结构。1. 数组——最基础也最高效数组是连续内存空间支持O(1)的随机访问。Java里的ArrayList、Python里的list、C里的vector底层都是数组。什么时候用数组需要频繁按下标访问元素的时候。比如存储一批用户ID、一周七天的温度数据。缺点是插入删除成本高要移动元素扩容有性能开销。一个小技巧如果你知道数据规模的上限初始化时指定容量可以避免多次扩容带来的性能损耗。java// Java - 指定初始容量 ListString list new ArrayList(1000);python# Python - 列表预留空间虽然不直接支持但可以用乘法初始化 data [None] * 10002. 哈希表——O(1)的查找神器哈希表是工作中用得最多的数据结构没有之一。Java的HashMap、Python的dict、C的unordered_map底层都是哈希表。java// Java - 用HashMap做缓存 MapString, User userCache new HashMap(); User user userCache.getOrDefault(userId, loadFromDB(userId));python# Python - 用dict统计词频 word_count {} for word in words: word_count[word] word_count.get(word, 0) 1cpp// C - unordered_map的使用 #include unordered_map std::unordered_mapstd::string, int scores; scores[Alice] 100; auto it scores.find(Bob); if (it ! scores.end()) { std::cout it-second; }O(1)的查找、插入、删除让哈希表成为解决快速查找问题的不二之选。代价是内存消耗较大且元素无序Java的LinkedHashMap、Python 3.7的dict可以保持插入顺序。实际应用场景缓存数据用户信息、配置项去重用Set底层也是哈希表计数统计词频、PV/UV快速查找根据ID查对象3. 链表——灵活的动态结构链表的优势在于插入删除是O(1)不需要连续内存。Java的LinkedList、Python的deque都基于链表或类似的链式结构。python# Python - 用deque实现高效的头尾操作 from collections import deque d deque([1, 2, 3]) d.appendleft(0) # 左侧插入 O(1) d.append(4) # 右侧插入 O(1) first d.popleft() # 左侧弹出 O(1)实际工作中链表很少独立使用但它是LRU缓存、消息队列等更高级结构的基础。算法题里常见的反转链表、合并两个有序链表考察的其实是对指针/引用操作的熟练度。java// Java - 手写一个简单链表的节点 class ListNode { int val; ListNode next; ListNode(int val) { this.val val; } } // 反转链表 ListNode reverse(ListNode head) { ListNode prev null; ListNode curr head; while (curr ! null) { ListNode next curr.next; curr.next prev; prev curr; curr next; } return prev; }4. 栈和队列——规则简单的工具栈是后进先出LIFO队列是先进先出FIFO。这两个结构规则简单但应用极广。栈的应用函数调用栈递归就是靠栈括号匹配编译器检查语法表达式求值中缀转后缀浏览器的前进后退队列的应用消息队列RabbitMQ、Kafka的底层思想BFS广度优先搜索线程池的任务队列缓冲区的数据排队python# Python - deque可以当栈也可以当队列 from collections import deque # 当作栈使用 stack deque() stack.append(1) # 入栈 stack.append(2) top stack.pop() # 出栈 → 2 # 当作队列使用 queue deque() queue.append(1) # 入队 queue.append(2) first queue.popleft() # 出队 → 1java// Java - 栈和队列 StackInteger stack new Stack(); stack.push(1); int top stack.pop(); QueueInteger queue new LinkedList(); queue.offer(1); int first queue.poll();5. 额外补充树结构简单提一下虽然文章标题说4种但二叉树在开发中也很常见值得简单一提。二叉搜索树BST可以让查找、插入、删除都达到O(log n)的时间复杂度。但普通BST可能退化成链表所以实际生产中用的是平衡二叉树如Java的TreeMap、C的std::map底层是红黑树。java// Java - TreeMap基于红黑树有序 MapString, Integer sortedMap new TreeMap(); sortedMap.put(banana, 1); sortedMap.put(apple, 2); sortedMap.put(cherry, 3); // 遍历会按key的自然顺序输出apple, banana, cherry学会选择合适的数据结构写代码的时候多问自己一句这里用什么数据结构最合适场景推荐数据结构需要快速按位置取元素数组ArrayList需要快速查找某个键对应的值哈希表HashMap/dict需要频繁在两端插入删除双端队列deque需要按顺序取出元素并移除队列Queue需要后进先出的场景栈Stack需要有序存储且频繁查找平衡树TreeMap需要去重哈希集合HashSet/set

相关新闻

实战测试10款降AI率网站:只选真正管用的那一款!

实战测试10款降AI率网站:只选真正管用的那一款!

AI写作工具让论文撰写和内容创作变得高效便捷,越来越多的学生和职场人开始依赖这类工具提升效率。然而,随着AIGC检测技术的不断升级,问题也随之而来——不少用户发现,自己用AI生成的内容被平台或系统识别为“AI痕迹明显”&#xf…

2026/10/19 17:22:44 阅读更多 →
【开题利器】专业级AI写作辅助网站:研究框架、文献综述一键搭建

【开题利器】专业级AI写作辅助网站:研究框架、文献综述一键搭建

每到开题季,无数本硕学子都会陷入同款困境:选题无思路、研究框架逻辑混乱、翻阅上百篇文献仍写不出合格综述、参考文献格式反复出错、熬夜搭建结构却被导师全盘打回。传统手工梳理文献、徒手搭建研究框架的模式耗时耗力,稍有疏漏就会延误开题…

2026/10/18 2:01:58 阅读更多 →
甲骨文云充值入口在哪?账号付款设置说明

甲骨文云充值入口在哪?账号付款设置说明

很多人第一次用甲骨文云,都会遇到一个挺尴尬的问题:账号明明注册好了,却怎么也找不到充值的地方;要么好不容易找到入口,绑了信用卡,结果提示支付失败。更烦人的是,甲骨文云控制台的界面老在变&a…

2026/10/19 12:45:19 阅读更多 →

最新新闻

Artcraft:数字时代的手艺逻辑与工艺知识体系

Artcraft:数字时代的手艺逻辑与工艺知识体系

1. “Artcraft”不是新词,而是被低估的创作方法论原点“Artcraft”这个词最近在设计、手作、数字内容社区里频繁冒头,但几乎没人说清楚它到底指什么。它既不是某个新出的AI绘画工具,也不是某家公司的产品代号,更不是某种加密艺术协…

2026/10/19 20:10:47 阅读更多 →
DCMTK 3.6.5 Win64预编译包:开箱即用的DICOM命令行工具集

DCMTK 3.6.5 Win64预编译包:开箱即用的DICOM命令行工具集

简介:本资源为DCMTK 3.6.5版本的Windows 64位预编译工具包,专为医学影像开发人员、PACS系统集成工程师及生物医学工程研究人员设计,解决DICOM数据解析、网络传输、格式转换与元数据调试等核心需求。压缩包共238个文件,含61个可执行…

2026/10/19 20:10:47 阅读更多 →
artcraft:数字创作的可证实践协议

artcraft:数字创作的可证实践协议

1. “Artcraft”不是新词,而是被长期低估的创作范式重启信号最近在多个设计社区、开源项目讨论区和创意工作坊里,“artcraft”这个词频繁跳出来——不是作为某个具体工具或平台的名字,而是像一个突然被擦亮的老铜牌,上面刻着“手艺…

2026/10/19 20:10:47 阅读更多 →
Windows原生C/C++ BLE开发:绕过WinRT直连手环传感器

Windows原生C/C++ BLE开发:绕过WinRT直连手环传感器

简介:本资源是一份面向Windows平台C/C开发者的BLE(低功耗蓝牙)通信实践工程,适用于具备基础WinRT编程经验的中高级开发者,解决在桌面端调用系统原生API实现蓝牙设备扫描、连接、GATT服务发现与数据读写等核心场景问题。…

2026/10/19 20:10:47 阅读更多 →
BASE64加解密实战:可调试、可定制、可诊断的工程化实现

BASE64加解密实战:可调试、可定制、可诊断的工程化实现

简介:本资源是一个面向Java初学者与中级开发者的BASE64加解密工具库实践包,聚焦网络传输、HTTP头处理、证书解析等典型场景中二进制数据的ASCII安全编码需求。压缩包共8个文件,含6个核心Java源码文件(涵盖Encoder/Decoder封装、异…

2026/10/19 20:10:47 阅读更多 →
L应用内存取证复盘:蓝队如何从内存镜像还原攻击链路

L应用内存取证复盘:蓝队如何从内存镜像还原攻击链路

我去年处理过一起很有意思的应急事件:某企业内部办公应用L在深夜出现异常外联,登录日志被攻击者清得干干净净,磁盘上能翻到的痕迹少得可怜。但内存镜像拉下来之后,攻击者的后门配置、窃取的会话凭证、甚至绕过二次认证的完整链路全…

2026/10/19 20:09:45 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →