Des*_*ams 5 oop types abstract-data-type data-structures
我的理解是,数据结构本质上是一个蓝图,其中包含根据其规范创建最终产品所需的所有信息,而数据类型是该设计的物理实现或实现(非常类似于基因型之间的区别)和表型,来自生物学)。
当涉及到面向对象的面向对象编程,这将是准确的说是一个抽象类或接口是一种数据结构,因为它包含了一组值和宣布的行为,以及一类,它实现的是抽象类或接口数据类型,因为它是这些行为的具体体现?
如果是这种情况,那么抽象数据类型(ADT)和数据类型之间的区别又如何呢?它们是真正不同的,还是ADT只是通俗地简称为“数据类型”?
我之所以这样问,是因为在我看来这些术语在交谈中经常互换使用,这让我怀疑我的理解是否不正确。
小智 6
我对在 stackoverflow 上回答问题以及这种数据结构与数据类型的讨论相当陌生,但希望这会有所帮助。除了我学到的知识之外,这些链接还为我做了很多事情:
http://cs.lmu.edu/~ray/notes/dtds/
首先,我将定义我对“实现”一词的用法,因为我使用它的方式似乎与您略有不同。我像 C++ 中的实现文件一样定义实现。此类实现包含某些接口如何工作的源代码。例如,单链表的实现是一堆节点,每个节点都包含数据,起始节点指向下一个节点,直到最后一个节点指向某种空值。从这个意义上说,我不能完全说数据类型是数据结构的物理实现。一个简化的版本是,数据结构实际上是一种或多种数据类型的物理实现。例如,堆栈是一种数据类型,而 LinkedStack 是实现堆栈的数据结构。尽管数据类型可以表示数据结构的所有可能实例(如上面的链接所述),但并非所有数据类型都必须如此。例如,int 是一种数据类型,但说它是一种数据结构并不是最好的想法。
为了总结每个内容,请让我按照数据类型、抽象数据类型和数据结构的顺序进行介绍。
数据类型或简称类型按数据的值和操作对数据进行分类。例如,如果数据是42,那么42是int还是string?如果它是一个 int,它是什么 int(它的值是多少)?是积极的还是消极的?它有哪些类型的操作?我可以和它分开吗?从这个意义上说,数据类型纯粹取决于它们的外部行为。
现在,某些数据类型可能不指定任何类型的实现,这些数据类型称为抽象数据类型。基本上,如果用户无法访问也不关心访问值和操作的实现方式,则数据类型是抽象数据类型。例如,整数是抽象数据类型,因为程序员不需要知道也可能不关心知道整数如何工作或如何添加整数。然而,所述程序员仍然可以使用整数来添加他/她的内容。用户创建的不透露其实现的数据类型也将是抽象数据类型。因此,许多数据类型都是抽象数据类型。此外,抽象数据类型可以对相似的数据类型和数据结构进行建模,并由特定的数据类型和数据结构实现,如上面的链接所述。
最后,数据结构是有效存储数据的方法,它们都与实现有关。例如,单链表和双向链表是不同的数据结构,因为它们具有不同的实现。单链表只能前进,而双链表可以前进和后退。我在上面描述了单链表的实现,简而言之,双向链表的实现与单链表的实现相同,但每个节点也将有一个指向每个前一个节点的指针,以允许双向链表向后移动。数据结构的要点是数据结构的实现(数据如何组织/存储)是如何区分的。
如果您想要一个双链表相对于单链表的效率示例,这些链接很好:
否则,希望我能有所帮助并祝你好运。