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

发布时间:2026/9/10 1:18:13

数据结构与算法,这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/9/9 10:06:48

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

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

2026/9/7 21:08:23

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

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

2026/9/10 1:16:04

谢海涛老师把数学方法讲到原理这一步

一个方法学会了怎样操作,是否就意味着已经理解?在初中数学学习中,这个问题经常出现在公式运用、因式分解和方程求解之间。步骤可以被记住,但题目的形式一变化,学生还需要知道方法为什么成立,以及它可以在什…

2026/9/10 1:16:04

Spring Boot+Vue个人网盘管理系统设计与实现全解析

又到了毕业设计季,看到"基于Spring Boot Vue个人网盘管理系统"这个题目,我一点都不意外。说实话,网盘类系统在毕设里一直是热门选题,原因很简单:业务闭环完整、技术栈主流、演示效果好,而且做好…

2026/9/10 1:11:04

基于主从博弈的电热综合能源系统动态定价与能量管理Matlab实现

直接说结论:这套“基于主从博弈的电热综合能源系统动态定价与能量管理”项目,我做过完整复现和改造,今天把建模思路、求解细节、Matlab代码结构、还有调试中踩过的坑一次性整理出来。核心就一句话:运营商定电价和热价,…

2026/9/9 13:11:35

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/9 10:21:54

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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