楼主: butterflyqqq

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

[复制链接]
论坛徽章:
0
11#
发表于 2013-10-19 03:30 | 只看该作者
貌似数据结构中包含了数据类型,而数据类型又建立在数据结构之上?
就像有人在其他评论里说的,数据本质上是没有类型的。我们都知道,数据在存储上是一堆01的数字,有时候我们要拿4个字节(int),有时候要拿1个字节(char),有时候又是8个字节(double);又有时候我们要拿第一个存进去的(FIFO),或者拿最新放进去的(LIFO),有时候又要拿最大的、最小的(heap),等等等。所以,数据结构是对数据的一种操作方式,定义了如何存取就定义了数据结构。至于数据类型?who care?你爱叫阿猫阿狗都可以。数据类型只是一个名称,它既可以包含在数据结构里,又可以命名数据结构。

那么数组到底是一种数据结构还是一种数据类型呢?
数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过index-->value来实现的。它不是具体要求内存上要存储着连续的数据才叫数据,而是说,通过连续的索引index,我可以访问相邻的数据。具体可参考c的数组实现、php的数组实现......

是不是除了线性表、队列、堆栈、树......这些,int char double也可以看成一种简单的只有一个数据元素的数据结构呢?
是的,还是那句话,你定义了数据的存取你就定义了数据结构。


使用道具 举报

回复
论坛徽章:
0
12#
发表于 2013-10-19 04:21 | 只看该作者
数据类型是某个原子数据的所属范畴。
数据结构是组织数据的方式。

有一个迷惑点是如何定义原子数据。
例如整数就是一种数据类型。而数组理论来说是一个数据结构,它是将同一数据类型的数据连续存储于内存内的数据结构。
但是因为数组实在太常用了,所以基本每一种语言都提供数组这种数据结构,语言包装好后,大家用起来就像数据类型,课本教起来就是数据类型,所以数组不似数据结构胜似数据结构。
另外有一些库也包装提供常用的数据结构,例如java的collection,c++的stl。


使用道具 举报

回复
论坛徽章:
0
13#
发表于 2013-10-19 05:19 | 只看该作者
数据结构是数据与数据之间的关系,数据类型是数据的种类。


使用道具 举报

回复
论坛徽章:
0
14#
发表于 2013-10-19 06:10 | 只看该作者
数据结构强调的是“结构”,强调怎么处理组成这个结构的各要素之间的关系,从而更高效的存取和计算。数据类型强调的是数据上允许的操作以及各个类型之间的隔离与转换。在实际实现上,一种数据结构可以有不同类型的实现,比如链表这种数据结构,可以用数组类型的数据实现,也可以用包含指针的数据类型实现。


使用道具 举报

回复
论坛徽章:
0
15#
发表于 2013-10-19 07:08 | 只看该作者
这样子说吧:
我们经常可以看到定义一个类型:
typedef struct {
    int x;
    int y;
}point;

分解一下:
数据结构:struct { int x; int y;};
数据类型:typedef .... point;

我想这是对程序员写代码时最直观的感受。


使用道具 举报

回复
论坛徽章:
0
16#
发表于 2013-10-19 20:22 | 只看该作者
数据结构的定义:相互之间存在一中或多种特定关系的数据元素的集合。有人说,数据结构就是用来存放有特定关系的数据的容器。

数据结构是程序员为适合某种应用场景,而选择的组织数据的方式,说数据(元素)之间的关系也行. 比如:
数组: 元素是有序排列的,通过编号能快速找到任一元素双向链表: 元素是一一链接的,删除/移动元素开销小

数据类型是数据的一种分类,是按照数据结构来分类的。数据类型的出现是为了把数据分成所需内存大小不同的数据。

     每个数据都对应一种数据类型. 数据类型的作用是程序员和计算机约定怎么处理数据,包括:
数据会占用多少空间.
什么样的数据是合法的.   3000 对 char是不合法
什么操作可以作用于此数据.  +/-不适合bool可能还有其他...

     一个或多个数据(元素) + 数据结构(元素间关系) 结合起来可以看做一个新的数据(也就是意味着一个新的数据类型).      所以,数据类型是按照数据结构和其数据元素的类型(可能有多种)来分类的.
      比如:int[],char[]数据结构相同(数组),但显然不是同一个数据类型.

还是不太明白,貌似数据结构中包含了数据类型,而数据类型又建立在数据结构之上?

      见上面

那么数组到底是一种数据结构还是一种数据类型呢?

      数组是数据结构, 指定了其元素数据类型的数组才是数据类型.

是不是除了线性表、队列、堆栈、树......这些,int char double也可以看成一种简单的只有一个数据元素的数据结构呢?

      否. int这样的基本数据类型不可能有子元素,子元素的关系(数据结构)也就无从谈起.


使用道具 举报

回复
论坛徽章:
0
17#
发表于 2013-10-19 21:15 | 只看该作者
数据结构:相互之间存在一中或多种特定关系的数据元素的集合
数据类型是数据的一种分类,是按照数据结构来分类的相必困惑lz的是这两个数据结构,事实上这两个数据结构是不同尺度上的说法,意义并不太相同。

例如我用沙子堆了一个小房子,沙子通过一定的结构关系组成了房子,我们叫它“房子型数据”
然后我又堆了好几个房子组成了一个小镇,房子通过一定的结构关系组成了小镇,我们可以定义它为“小镇型数据”

我又做了几个小镇,那么称小镇小镇间、房子房子间和小镇房子间的关系叫做数据结构(沙子间的结构就不在讨论了)。当然如果乐意的话,我又可以称这是一个“大镇型数据”


使用道具 举报

回复
论坛徽章:
0
18#
发表于 2013-10-19 22:15 | 只看该作者
二者的定义不用说了,百科都有,个人觉得,数据类型偏向于用途用法方面,比如整型我用来计算,做加减乘除,字符串我用来表示文字信息,可以截取,拼接;数据结构偏向其内部原理,如链表的实现链式存储,队列用来保存待处理的数据等;就说数组吧,我写 int[10] arr_data;的时候,我说arr_data是一个数组,这里的数组是说的是数据类型,我说这些数据用一个数组做成线性表存储的时候,这里的数组说的是数据结构。


使用道具 举报

回复
论坛徽章:
0
19#
发表于 2013-10-21 21:43 | 只看该作者
数据类型(data type) = 接口(interface) + 数据的表示(data representation)
数据表示有多种, 数据结构(data structural representation)的表示形式是其中一种.
Essential of Programming Languages, 3rd Edition (豆瓣)  第二章讲的应该就是这个了.

另外酷壳上的这篇 类型的本质和函数式实现 也相关.


使用道具 举报

回复
论坛徽章:
0
20#
发表于 2013-11-1 11:44 | 只看该作者
数据结构是数据的一种表现形式,我们把一个具体的人当做一个数据,这人都是由一个头两条腿组成。这头跟腿可以看成是具体的这个人的组成的数据项,他们的关系是头是在上面的腿是在下面的,所以具体的某个人这个数据的表现形式是头在上面两条腿在下面。而每个人都有这样的表现形式也就是都有这样的相同的数据结构,我们把每个具体的人归为同一类,把它叫做人类这种数据类型。这数据类型也可以看成是数据的一个属性,每个数据都有这样的一个属性。int a[3],int b[4]这a和b的数据类型的属性是相同的吗?他们的表现形式(数据结构)是一样的吗??我的回答是都不一样,a跟b一个是由3个连接的int组成,一个是由4个连接的int组成。如果拿人来做比较,其它所有的构成都一样,但一个是1颗脑袋,一个是2颗脑袋,那这两个我们会把它当成是相同的数据结构吗?数据结构都不同,那它们自然是不属于同一个数据类型了。在我看来数组类型,结构体类型是一个很大的概念,就像基本类型一样,我们可以说int是属于基本类型的,char也是属于基本类型的。但int跟char这两个不是属于同一个类型的。而int [3]这是属于数组类型,int [4]也是属于数组类型,但它们不是属于同一个数据类型。这有点像我们定义的类,我们用类声明的对象都是属于类类型,但类类型这个大的类型底下又分了无穷个自定义的类型


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表