分享

“数据结构” 和 “数据类型” 两个概念的本质是什么,两者的区别与联系是什么?

 pgl147258 2015-01-08

严蔚敏编著的<< 数据结构>>教材对数据结构的定义:相互之间存在一中或多种特定关系的数据元素的集合。有人说,数据结构就是用来存放有特定关系的数据的容器。数据类型是数据的一种分类,是按照数据结构来分类的。数据类型的出现是为了把数据分成所需内存大小不同的数据。还是不太明白,貌似数据结构中包含了数据类型,而数据类型又建立在数据结构之上?那么数组到底是一种数据结构还是一种数据类型呢?是不是除了线性表、队列、堆栈、树......这些,int char double也可以看成一种简单的只有一个数据元素的数据结构呢?希望看看大家的理解,谢谢。

沈兄的回答(3票)】:

感谢 Leo Ding毛自力 ,两位说的对我很有启发

我补充一下我的想法,还是延续 原子 和 分子 的比喻。

int char float double 这些是 数据类型 ,类比作原子,他们间的不同就是元素种类的不同,只涉及自身的不同,比如两种原子内的质子中子数不同,是一直内在属性。

链表 队列 堆栈 树 这些是数据结构,类比作分子,他们间描述的是数据间的关系,就如同分子描述了原子的组合方式,

再说说只含有一个数据的链表/队列/堆栈/树,依据你给的定义:“相互之间存在一中或多种特定关系的数据元素的集合”,只含有一个数据甚至不含有数据也能算作一个“集合”;从实际结构上来说,一个链表只含有一个数据甚至不含数据,他还是会有指针域和表头,队列/堆栈等也一样,而这些部分就表现了“关系”。相反,单个int/char/float/double数据不含有这些表示关系的部分,所以不能算做一种特殊的 数据结构 。

最后,“数组”确实是一个令人头疼的概念,不过我觉得应该把他算作 数据结构 的一种。依然先从定义上来看,他确实描述了一种关系,只不过刚好描述的数据一个挨一个紧密排列的关系;从实际结构上来说,我和 陈岩 看法不同,单个char/int确实和数组一样内存上连续,但两个char间不一定是连续的,但数组中却一定是连续的,数组描述的正是这种紧密连续的 数据结构 数组在内存中储存时也有末尾的多余部分“\0”来描述“结束”这一关系。

【Leo Ding的回答(0票)】:

先说数据类型,这个从字面上就可以理解。比如我们常用的字符型(string/varchar),数值型(number/int/double),布尔型(boolean),日期(date/datetime)等等。这些是用来标注一个变量或者数据库中的一个字段是什么类型,储存什么样的值的。比如说你定义了一个变量叫vUpdateDate,会给它指定日期类型,就只能给它赋日期型的值。

而数据类型,就像书里说的,是一些数据元素的集合。这些数据元素可以是同一类型,也可以是不同类型的。举例说明,相同类型的数据结构,比如数组,里面可以存储同样的值,比如一个班级里所有学生的名字或者学号。而不同类型的数据结构,往往需要自己定义。比如定义一个数据结构存储一个产品的相关属性:产品编号,产品名称,产品大小(长宽高),产品价格,生产日期等等。而这样的数据结构也可以定义成类(class),这样这个产品类也可以作为类型来使用了。

希望能有帮助!

【毛自力的回答(0票)】:

可以把数据结构理解为分子,而数据类型就是原子.

自然界只有100+种原子,而数据类型也就只有语言本身定义的那些

而数据类型就像分子可以有无穷多种

至于单原子,即独立的一种数据类型算不算一个数据结构

我无法确定,因为有些人说单原子不是分子,有些人说是

【知乎用户的回答(0票)】:

声明:如果你是编程初学者或者之前从来没有认真思考过编程,下面的内容看起来可能会觉得非常奇怪。

----正文----

首先要理解什么是数据。

数据是用来表示差异的,都一样了就不是数据了。

接着数据需要一种表示方式,最简单的方式是使用二值位串。可以理解为我们常说的二进制数据。

这里强调一点:数据没有类型。如,“1”是一个数字还是字符?数据的类型在于使用其的方式。

下面数据需要一个容器。容器有尺寸,所以容器中能够表示的数据量是有限制的。

通常编程语言中提供了几种类型的容器,对应于不同的大小和操作。准确的说数据类型是编程语言的限制,计算机并没有这种限制。至于这种限制是利大还是弊大,不同的人有不同的看法。

简单的说,数据类型就是一组操作集,如,数字的加减乘除。

接下来考虑数据之间的关系,这个就是数据结构了。

数据结构描述的是同种类型的多个数据之间的联系。

数据结构是为了便于管理数据。通常为了特殊的目的,所以数据结构常常要自行设计。

某种数据结构同样也包含了一组对应操作,也就是说数据结构是特殊的数据类型。

不知道有没有人能够看懂。这是目前为止我的全部理解了。

【知乎用户的回答(0票)】:

语言本身支持的叫数据类型, 自己搞的叫数据结构

【陈岩的回答(0票)】:

数据类型,像int, char之类的,就是数据类型。

int占4个字节,32比特;char占1个字节,8比特。这种数据在内存上是连续的,中间不可以插入其他的东西。

链表、栈、队列,是数据结构,都是靠地址来进行数据与数据之间的链接。

如图所示。

char跟int在内存上一定都是连续的。包括数组也一样。但数组既不是数据类型也不是数据结构。数组包含了若干个数据类型相同的个体。char跟int在内存上一定都是连续的。包括数组也一样。但数组既不是数据类型也不是数据结构。数组包含了若干个数据类型相同的个体。

而正文的链表,三个节点可能会指向3个不连续的字节。这样,此链表所占用的空间就是蓝色的部分,红色部分可能被其他的一个什么东西给占了(比如另一个char)。

原文地址:知乎

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多