数据结构实现
Data Structures Implementation
存在数组、链表、队列、堆栈、二叉树等数据结构。像Java或C++这样的语言在很大程度上已经实现了它们,而且API的存在可以在任何程序或应用程序中使用。根据需要,可以选择特定的数据结构。
我的问题是,了解实施细节的必要性是什么。仅仅知道例如,如果搜索是程序的重复任务,可以使用数组而不是链表,这还不够吗。
我是新来的,即使问这样的问题也可能很天真。即使是面试也非常关注它们是如何实现的。请帮我理解。
谢谢!
由于大多数程序都需要存储和处理某种数据,因此拥有良好的数据结构来表示这些数据至关重要,在某些情况下,甚至对程序的性能至关重要。
也就是说,数组、链表、二叉树等是可用的基本数据结构,它们的有用性正在被许多库中可用的事实所证明。深入了解它们可以让您为任务选择最佳的数据结构。
了解这些数据结构的实现是了解它们如何工作、缺点和优点的好方法。当然,您可以从理论上阅读它们,并且可以对它们有足够的了解,以便能够有效地使用库中提供的实现。问题是,这并不是故事的结束。
作为一名程序员,你经常会处理不同类型的数据,这些数据可能不太适合标准数据结构。您经常编写自己的数据结构,为特定任务进行自定义。了解一些基本数据结构是如何实现的,不仅是一个很好的练习,而且在某些情况下也是一个灵感来源。
至于面试,他们的范围是评估你作为程序员的能力。实现基本数据结构显示:
- 候选人对基本数据结构的熟悉程度
- 候选人编写代码的方式/为围绕代码的辩论提供了一些起点(例如代码质量、性能技巧)
- 与特定问题无关,即你不会在面试中浪费宝贵的时间来解释问题
- 它们通常足够简单,可以在面试所需的时间内完成
此外,作为一名初学者,它们是一个很好的练习,可以介绍一些可以应用于其他情况的常见模式和技术。
在面试中,这些问题的目的是让被面试者证明他们掌握了语言,并且能够像计算机科学家那样进行抽象思考。
在Java和C++等面向对象语言中尤其如此;编程经常试图模拟真实世界。如果你谈论的是排序算法,你可以很容易地将该算法应用于一堆编号的便利贴,最终得到一组经过排序的便利贴。或者查看数据结构,您可以将类似的模型应用于餐厅订单单(优先级队列、链表、希望不是堆栈?)。
因为大多数软件工程职位同样要求申请人编写模拟现实世界事物的软件(例如,通过互联网而不是信鸽进行对话),算法/数据结构类型的问题向面试官表明,申请人能够以深思熟虑的方式对软件进行编码,以执行或模拟真实世界的任务。
从更实际的角度来看,Java和C++中预先构建的数据结构必须设计为能够处理大量输入。与实现只处理Integer:String配对的映射相比,构建一个可以处理Object:Object存储的任何组合的映射需要更多的开销。
如果你最终扮演的角色是毫秒/字节,那么你可能需要手动构建/调整为特定目的设计的数据结构。Java缺乏内置的基数排序就是一个典型的例子,基数排序的优化只在非常小众的情况下发挥作用(当你只需要根据基元的二进制值对基元进行排序时Fast!;正因为如此,如果开发人员的特定情况实际上需要使用基数排序,那么将实现留给开发人员更有意义
总而言之,这些问题很难解决尽管经验丰富的程序员可能会说,当有人第一次要求你在白板上编写图形遍历算法,或者在工作中从头开始构建优化的搜索算法时,无论你是否学习过,这都会很困难。
- 如何使用set实现无序数据结构?
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 如何在C++中实现节点数任意的通用树数据结构?
- C++ 中的 TRIE 数据结构实现
- Trie数据结构的实现
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 数据结构实现
- 与shared_ptr相比,更小的运行时数据结构和更快的代码可实现独特的_ptr
- C++:如果 std::atomic_flag 是唯一的无锁原子类型,如何在C++中实现无锁数据结构?
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 我应该使用什么样的数据结构来实现UPGMA
- 我应该如何在恒定长度的 STL 样式数据结构中实现max_size?
- 如何使用 C++ 实现堆数据结构
- 堆栈(数据结构)实现
- 如何实现数据结构,就像C 中的数组一样支持不同的类型元素
- 我需要一个像堆栈一样的数据结构,但具有随机访问,但是,我应该实现什么
- 在Haskell中使用O(1)元素访问实现高效的类似拉链的数据结构
- STL如何用非线性数据结构实现反向迭代器去引用
- 实现数据结构时的智能指针或原始指针
- 将值映射到像素对-如何实现数据结构