对数据结构概念的理解和认识_数据结构的简单概念

业余研究数据结构,今天把概念做个小总结。

数据结构有这么几个比较重要的概念:

1.数据

数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
数据是计算机程序加工的原料。

<数据>的概念比较抽象和泛泛的。

2.数据元素

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。

<数据元素>是一个很具体的概念。比如说你有很多笔,「笔」这个概念可以称为<数据对象>,而你的每一只笔都是一个具体的<数据元素>

3.数据项

一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。

一般在研究某个数据结构时,我们只研究到数据项。

4.数据对象

数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

<数据>是一个抽象的概念,<数据对象>也是较为抽象的概念。万「物」皆可为<数据>,但是数据对象只是将其中性质相同的「物」,范围较元素集中。

5.数据结构

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

e6616a74c238e585b2b8b0e455a16e1a.png
数据结构三要素

PS.个人理解:<数据结构>的概念比较难以理解,在我看来<数据结构>是<数据对象>的具体实现。此外,<数据结构>还涉及到<数据类型>的概念。

ecb54dbf97e7f430aa5b1aa81547daa8.png
数据对象、数据元素、数据结构与数据类型的相互关系

6.数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称。
数据类型是和数据结构密切相关的一个概念,它最早出现在高级语言程序中,用以刻画(程序)操作对象的特性。(《数据结构——严蔚敏》)

按照“值”的不同特性,高级语言中的数据类型可分为两类(以C语言为例):

a. 原子类型。其值不可再分的数据类型。

如int类型,其范围为-2147483648~2147483647,可进行的操作有加减乘除....

b. 结构类型。其值可以再分解为若干成分(分量)的数据类型。

c语言中可以使用struct来定义结构类型。

//定义一个person类

PS.个人理解,如果一个元素为结构类型,那么该结构类型的各个组成成分即为该元素的元素项,如:

3eb0ed1fd111bae06e92e089541c6bf8.png

在该人员信息表中:

可以将整个数据表看成一种数据类型,称为表格类型;把表格的每一行(除第一行)看做一个数据类型,称为人员信息类型;把每个人员细分信息各看成不同类型,那么有序号类型(int)、姓名类型(char*)、生日类型(struct Date)、性别类型(enum gender)。

第一点,可以看出表格类型是用人员信息类型以某种数据结构实现的,也就是说每个表格类型元素都是由若干个人员信息类型的元素构成,但不能说表格类型就是人员信息类型<数据对象>,只能说表格类型使用了人员信息类型<数据对象>。

第二点,可以将人员信息看成一个数据对象(表格类型使用了该对象,人员信息类型是该对象的具体实现),那每个人员信息元素都由序号姓名生日姓名这四个数据项构成,这个四个数据项有的是原子类型的,有的是结构类型的。

第三点,每个数据元素可以包含一个或多个数据项,一个表格元素的数据元素中只包含人员信息一个类型的数据项,而在人员信息元素中包含四个数据项,在下列代码中,日期类型(的数据元素)又包含年月日三个数据项。

//定义一个人员信息表格类型

综上可知,<数据、数据对象、数据元素、数据项>是数据系统中的干,<数据类型、数据类型>是数据系统中的枝,可以通过<数据类型、数据类型>来丰富<数据对象>,进而丰富整个数据系统。(自己瞎总结的)

7.抽象数据类型

抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作。
抽象数据类型(ADT,Abstract Data Type)是指一个数学模型以及定义在此数学模型上的一组操作。它通常是对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据操作的集合。——百度百科。

数据类型是个具体的概念,如JAVA语言中的int类型,就是一个实际的数据类型,C++又是另一个;而ADT是个抽象的概念,ADT 用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。

小结

以上七个概念中:数据、数据对象、数据元素、数据项比较好理解,剩下三个:数据结构、数据类型、抽象数据类型比较难理解,其中:

1.数据结构是存在一种或多种关系的数据集合,在数据对象上多了一层数据关系的概念,数据关系引出后面逻辑结构、物理结构和运算的概念;
2.数据类型是是一个值的集合和定义在此集合上的一组操作的总称。数据类型与数据结构关系密切,数据类型在高级语言中起到描述的数据对象作用,数据结构在高级语言中的具体实现离不开该语言中的数据类型。
3.一个新的数据类型需要借用已有的数据类型(数据对象)以及数据结构来实现,但是数据类型与具体环境紧密相关,同类的类型在不同的环境下其性质、操作或多或少存在差异性。如int类型,即便是在C++中,不同的操作系统,其int类型大小都不太一样(在64位下为8个字节,在32位下为4个字节,某些环境下为2个字节),java中int为4个字节。因此,我们可以不考虑具体环境,只考虑数据结构与数据对象,从数据类型中抽象出ADT概念来。

之前简单的学习过C++和Java,对数据结构的概念不是很了解,个人感觉,C语言对数据结构的支持不算很好,C++和Java里引进了类的概念,能够对数据类型进行很好的封装,而C语言须借用struct才能创建数据类型,且数据类型的操作需要在外部定义函数。

此外,C++对ADT的支持不如Java,java中的接口就融合了ADT的思想。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值