数据结构与算法,这4种结构写代码时每天都在用

发布时间:2026/11/3 11:50:04

数据结构与算法,这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
延伸阅读

更多相关文章

2026/11/3 14:50:55

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

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

2026/11/3 18:11:02

凡诺电子:为什么LCD显示黑色还是会“泛白“?

很多客户在调试设备界面时都会提出同一个问题:"为什么LCD显示黑色的时候,总感觉有点发灰?是不是屏幕质量不好?"实际上,大多数情况下,这并不是屏幕质量问题,而是LCD显示技术本身的特点…

2026/11/3 20:42:53

AgentScope多智能体框架实战:从踩坑到跑通工程化系统

1. 从一堆散装脚本到工程化系统:我为什么盯上了 AgentScope前阵子我在做一个多智能体协作的验证项目,需求说起来不复杂:让几个不同角色的 Agent 分工完成一份行业调研,一个负责检索资料,一个负责交叉验证,一…

2026/11/3 20:42:53

Fledge Alpha匿名免费模型:1M上下文接入与避坑

1. 先把这个模型说清楚:Fledge Alpha 能干什么、不能干什么第一次看到"Fledge Alpha:匿名免费模型,1M 上下文 129B Token 零花费"这个说法,我第一反应不是兴奋,而是三个问号:匿名到什么程度&…

2026/11/3 20:42:53

零基础PCB设计入门:从原理图、封装到DRC的完整流程

简介:这份PDF面向零基础想自学PCB设计的读者,也适合已有基础的设计师查漏补缺,内容围绕嘉立创EDA的使用习惯与入门路径展开。它把工程创建、元件库管理、元件与封装关联、原理图绘制中的网络标签和模块整理、DRC检查、PCB间距规范&#xff0c…

2026/11/3 20:42:53

2026年装修管理软件测评:AI与云端协同成主流

1. 2026年装修管理软件行业现状与测评背景 装修行业数字化转型已经进入深水区,2026年的装修管理软件市场呈现出三个显著特征:首先是SaaS化程度达到87%,云端协同成为标配功能;其次是移动端使用时长首次超过PC端,占比达到…

2026/11/3 20:42:53

USRP X410+相控阵实现毫米波通感一体化实测

1. 项目概述:这不是实验室Demo,是实打实跑在空旷场地里的毫米波通感一体化系统“基于USRP和相控阵的毫米波通感一体化原型:从同步到定位的实测之旅”——这个标题里藏着三个硬核关键词:USRP、相控阵、通感一体化。我第一次看到它时…

2026/11/3 20:37:52

Dynamics 365 MB-365配置因果链识别与三阶映射能力解析

简介:本资源为MB-300认证考试《Microsoft Dynamics 365: Core Finance and Operations》的完整题库PDF,面向备考微软Dynamics 365财务与运营方向的开发人员、实施顾问及系统管理员,助力高效掌握核心考点与实操逻辑。资料严格依据2021年3月更新…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

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

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

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

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

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

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑