【发布时间】:2011-09-26 05:12:30
【问题描述】:
如果我将抽象数据类型的标准定义用作提供一些功能来管理数据集合的黑盒,则链接列表符合该描述:
提供可用于维护对象列表的函数 add(x) 和 get(i)(以及其他)的容器。
但是当你问这些操作的时间复杂度是多少时,你会意识到这取决于这个容器是如何实现的:
如果你只是在内部维护一个到头节点的链接,上述两个操作将在 O(n) 时间内执行。如果您另外维护到尾节点的链接,您将在两者上获得 O(1) 时间。
所以我的问题是,出于学习目的,您认为链表是 ADT 还是数据结构?
这个问题是在我尝试从 Skiena 的算法设计手册中实现 Stack ADT 时提出的,并且正在阅读它的 put(x) 和 get() 方法的性能如何取决于选择实现的数据结构它。书中说,在这种情况下,选择数组或链表数据结构来实现这个 ADT 并不重要,它们都提供了相似的性能。
但是他们呢?它不取决于该链接列表的实现方式吗?链表本身的实现方式有很多种,那岂不是让它本身就是另一个ADT?
【问题讨论】:
标签: arrays data-structures linked-list abstract-data-type