IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Iterator

共 2 篇相关文章

IT 累计浏览 4,103

二叉树迭代器算法

这篇文章探讨了如何为二叉树设计迭代器,从而将遍历算法与具体数据结构解耦,实现如通用求和函数这样的抽象操作。作者指出,直接转换递归遍历行不通,因为其依赖编译器管理的隐式调用栈。核心思路是通过显式栈结构来手动控制遍历流程。 文章详细展示了如何基于栈实现一个非递归的中序遍历,并将其封装为包含`next()`方法的迭代器。关键设计在于,迭代器的状态完全由栈的内容决定,每次调用`next()`对应一次栈操作。作者还澄清了一个常见误区:尽管单次`next()`调用可能涉及多次栈操作,但由于每个节点在整个迭代过程中仅入栈和出栈一次,因此总时间复杂度仍是线性的O(n),与递归遍历一致。 最后,文章简要对比了在支持`yield`语义的语言(如Python)中,一种更直观的生成器实现方式,并提示读者思考其背后的变换原理。

IT 累计浏览 2,333

从数组里删除一个元素

这篇讲的是数组元素删除这个看似基础实则充满陷阱的操作。作者没有停留在某个特定语言的语法教学上,而是横向对比了 JavaScript 的 `splice`、Python 的列表推导式以及 Java 中 `ArrayList.remove()` 等多种主流方案。他详细拆解了每种方法背后的内存移动机制与性能开销,比如为什么基于索引的删除在连续内存的数组上效率更高,而链表结构的列表删除则更灵活。 文章特别点出了初学者常忽略的细节:例如在循环中删除元素时容易引发的索引错位问题,以及某些语言中“删除”操作实际上只是标记为不可用、等待后续垃圾回收的特性。作者通过具体的代码片段和执行流程分析,让这些抽象概念变得清晰。 对于需要频繁进行增删操作的数据结构选型,文章给出了明确建议:如果追求极致读取速度且删除不频繁,连续数组更优;若需动态增删,则应考虑链表或特定优化过的容器。整个对比基于实际的代码执行和性能考量,最终指向一个核心:理解底层机制,才能做出明智的技术选择。