数据结构的粗略定义是,它允许您存储数据并对该数据应用一组操作,同时保持操作前后数据的一致性。 然而,有些人坚持认为像'int'这样的原始变量也可以被视为数据结构。我得到了那个允许你存储数据的部分,但我猜测操作部分丢失了。原始变量没有附加操作。所以我觉得,除非你定义并附加了一组操作,否则你不能称之为数据结构。 'int'没有附加任何操作,它可以使用一组通用运算符进行操作。
请告知我这里是否有问题。
答案 0 :(得分:5)
要说结构的某些东西意味着有一种形式或格式来定义数据的结构。请注意,这与数据的实际存储方式无关。例如,您可以创建一个完全存在于单个Integer中的数据结构,但它表示许多不同的值。
数据结构是用于描述如何在系统中存储数据的任意构造。它可以像单个基元一样简单,也可以像类一样复杂。所以答案主要是主观的。如果您决定使用原语,那么“是”可以将简单原语视为原始数据结构,因为它描述了您希望如何存储数据元素。答案也是“不”,因为它描述了一个结构的元素,而不一定是整个结构本身。
至于这与操作有何关系,严格来说数据结构与行为无关,它只是一种存储机制。保持数据的一致性确实是一种行为。是的,如果您尝试将32位值转换为字节,您的编译器可能会发出错误,但这是系统行为(即编译)对应用程序的数据结构的行为的症状,其中原语是一个元素。
答案 1 :(得分:2)
我认为您对数据结构的定义并不正确。
在我看来,struct
(没有方法)是一个有效的数据结构,但它没有真正的“操作”。这并不重要。这是持有数据。
为此,int保存数据,Object保存数据。它们是数据结构(技术上)。
那就是说,我没有发现自己说“我应该使用什么数据结构?我知道!一个int!”。
我想说你需要重新评估“数据结构”的含义。
答案 2 :(得分:1)
我认为“int”是一种数据结构 - 它具有明确的表示和含义。也就是说,根据您的系统,它具有特定的长度,可用的特定运算符集和指定的表示(无论是两个赞美)。它被设计为保存“整数”。
实际上,区别并不是特别相关。
答案 3 :(得分:1)
Primitives do 附加了操作;但是,它们可能不像您在面向对象范例中所期望的那样采用方法的格式。
分配=
,添加+
,减法-
,比较==
等都是操作。特别是如果您认为可以在某些语言(例如C ++)中为任意类(即:数据结构)显式定义,覆盖或重载这些操作,那么原始int
,char
或者什么你有没有什么不同。
答案 4 :(得分:1)
您对数据结构的定义并不完全正确。数据结构不一定具有任何附加的行为或操作。 ADT或抽象数据类型是您描述为数据结构的内容。 ADT包括数据以及处理该数据的行为或操作。 int本身不是ADT,但我想你可以把它称为数据结构。如果你封装了一个int及其操作,那么你有一个ADT,我认为你试图将其描述为数据结构。类提供了一种在现代语言中实现ADT的机制。
wikipedia对抽象数据类型有很好的描述。
答案 5 :(得分:0)
原始变量没有附加操作。所以我觉得除非你定义并附加了一组操作,否则你不能将它称为数据结构。
'int'没有附加任何操作,可以使用一组通用运算符进行操作。
通用?那么2+2
如何运作,但"ninja" + List<float>
却没有?如果操作员是通用的,那么它可以处理任何事情。它没有。它仅适用于一些预定义类型,例如整数。
Ints肯定会对它们定义一组操作。例如,加法,减法,乘法或除法等算术运算。大多数语言也有一些ToString()
类似于整数定义的功能。但你不能只用int
做任何。例如,您无法将int
传递给期望字符串的函数。 int
有一组非常具体的操作。这些操作不是成员方法。它们以运算符和非成员函数或其他类的成员方法的形式出现。但它们仍然是整数运算。
答案 6 :(得分:0)
我不认为,(参考:Wikipedia entry)数据结构包括允许操作的定义(在运算符上)。当然,我们可以引用C ++ 类作为反例,我们可以在其中定义重载运算符。同时,我们将结构定义为复合/用户定义的数据类型,并且不对它们声明任何允许的操作。我们允许编译器解决这个问题。
答案 7 :(得分:0)
'int'没有附加任何操作,可以使用一组通用运算符进行操作。
操作与他们操作的事物本质上相关联;没有通用操作这样的东西。
在数学意义上这是正确的(<
适用于整数集,但对复数没有意义),并且在计算机科学意义上(评估a + b
要求{a
1}}和b
是或可以转换为定义+
操作的兼容类型。
答案 8 :(得分:0)
当然,这取决于“数据结构”的含义。其他人则关注你的定义是否正确并提出好的问题。但是,如果我们说“让我们暂时忽略这个术语,并专注于你所描述的内容?”换句话说,如果看看
当然,int
符合资格。 (如果int
上没有任何操作,我们都会被卡住!)
对于以这些问题开头的编程的更多数学方法,并将它们带到一些所谓的“计算代数”,请参阅Alex Stepanov和Paul McJones的 Elements of Programming