抽象数据类型和逻辑数据结构有什么区别?



我很难区分抽象数据类型(ADT)和逻辑数据结构(LDS)。我能想到的唯一区别是,adt定义了操作,而LDS更多的是关于如何存储数据。但是Stack可以是ADT,因为我们知道什么类型的操作必须被拒绝才能称为"Stack",也可以称为LDT,因为我们知道数据应该如何"结构化"才能称为"Stack"。ADT和LDS都是"抽象的",因为我们没有讨论它们是如何实现的。所以ADT和LDS是同一事物的不同名称,但取决于我们来自哪里,我们可以称之为ADT或LDS,这对吗?

抽象数据类型(ADT)是一个数学模型以及在该模型上执行的一些操作。例如,堆栈ADT由一系列整数(比如说)以及push、pop、isempty、makeemptystack和top操作组成。ADT类似于Java中的接口,是规范。数据结构是关于如何实现这些规范的。例如,栈ADT操作可以使用数组数据结构或链表数据结构来实现。队列ADT可以使用循环数组数据结构来实现,这样所有的ADT操作都可以在O(1)时间内完成。

在现实世界的问题中,您只会遇到构成ADT的可能操作的一个子集,您需要找到一个能够有效地实现这个操作子集的数据结构。例如,在某些应用程序中,您希望维护一组整数,您对该集合所做的唯一操作是查找集合中最小元素的值,删除集合中最小元素,然后向集合中插入一个新元素。(应用包括Dijkstra的最短路径算法、Prim的最小生成树算法和Huffman编码。)一个包含MIN、EXTRACTMIN和INSERT这三个操作的集合定义了最小优先级队列ADT。能够在O(log n)时间内有效地实现所有这三种操作的数据结构就是最小堆。其他数据结构(如链表、未排序数组、排序数组)的一个或多个操作将花费O(n)时间,因此对于这种特定的ADT效率较低。

最新更新