我正在学习数据结构课程,并对什么被认为是 ADT(抽象数据类型)和什么不是(如果它不是 ADT 那么它一定是实现?)感到有点困惑。
具体来说,我说的是堆。
我在维基百科上读到“堆是一种专门的基于树的数据结构”,这是否意味着它是一个ADT?如果是这样,那么我无法理解以下行,也来自维基百科“堆是称为优先级队列的抽象数据类型的一种最有效的实现”。
我的意思是,堆可以是一个 ADT,也可以是其他一些 ADT 的实现(在本例中是优先级队列的实现)?我理解 ADT 的概念,在二元堆的上下文中,我理解它可以使用数组来实现,其中arr[i]
是的父级arr[2i]
and arr[2i + 1]
我只是很困惑堆是否可以一方面是使用数组实现的 ADT,另一方面是实现其他 ADT 的数据结构。
想得到一些关于此事的澄清。
堆不是 ADT。它是一种数据结构。
维基百科的强制性引用:
在计算机科学中,抽象数据类型(ADT)是一种数学
数据类型模型,其中数据类型由其行为定义
(语义)从数据用户的角度来看,特别是
就可能的值、此类数据的可能操作而言,
以及这些操作的行为。这与数据形成对比
结构体,是数据的具体表示,是
实施者的观点,而不是用户的观点。
奖励内容的灵感来自 Steve McConnell 的《Code Complete - 2》。
与在问题域中工作的 ADT 相比,数据结构是低级实现域项。 ADT 允许您操纵现实世界的实体,而不是低级的实现实体。您可以将单元格添加到电子表格中,将新类型的窗口添加到窗口类型中,或者将另一个乘客添加到火车模拟中,而不是将节点插入到链接列表中或将项目添加到堆中。
-
你可以清楚地看到堆定义了像 insert()、heapify()、peek()、getTop() 等语义 - 列出here https://en.wikipedia.org/wiki/Heap_(data_structure)#Operations详细。因此它是一种数据结构。
-
但是,如果您模拟俄罗斯方块游戏,其中添加一个新块将简单地放置在它掉落的地方的顶部,则该俄罗斯方块游戏的 UI 实际上将是一个 ADT。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)