我们在学习一门新的知识的时候,都会去了解一些这个方便的基本术语和定义,没有这些概念作为铺垫,以后的内容很难进行下去,虽然枯燥,但是不得不慢慢的去体会。不过任何一门严谨的学科,他们的术语都是经得住仔细推敲的。
数据:数据是信息的载体,是对客观事物的符号表示,它能够被计算机程序识别、存储、加工和处理。
我的理解:对于我们学习计算机的人员来说,只要是和计算机之间交互的信息,都可以称之为数据,因为数据的概念都比较广泛。就像是是问“简单”是什么意思一样,有些东西已经是一个基本的单元了,很难使用其他词语继续解释。就算是解释了,也不是很清楚。
数据元素:是数据中的一个个体,是数据的基本组成单元
数据对象:性质相同的数据元素的集合
我的理解:这种情况下,无论是哪个人,哪本书,都会举例子说明,因为这样更加有利于我们的理解。例如:我们现在的研究对象是某个高校的学生,那个数据对象就是这个高校的所有学生;数据元素就是一个具体的学生,而这个具体的学生还有 学号,姓名,年龄等。从而就引出了下面的定义
数据项:数据项是数据元素的组成部分,是具有独立含义的表示单位。
这时候,有的同学就开始纠结,不是说好了数据元素是数据的基本组织单位吗?为什么他还能够细分;其实,这种时候我们不应该纠结,就像原子一样,说是组成物质的基本单元(这句话是楼主说的,不一定正确,就是这个意思),发现了中子和电子以后,原子的定义并没有变,只是说原子是由中子,质子,电子组成。
数据结构:相互之间存在着一种或多种特定关系的数据元素的集合
可见,这里的数据结构研究的对象是数据元素,也就是我们上面说的某个高校的具体学生,还有就是这些具体学生之间的关系。例如有的是同学,有的朋友,有的是男女朋友等。可见,在数据结构的定义中,并没有提到操作(后面还会提到的)。
存储结构:数据结构在计算机中的表示
我感觉着句话说的比较好,虽然不一定是标准的定义,但是更加有利于我们的理解。确实,通过上面的数据结构定义,我们可以清楚的知道,要想在计算机中存储数据结构,有两个部分:数据+关系,从而存储结构的任务就是如何将将这些数据以及他们之间的关系存储到计算机中。
数据类型:是一个值得集合和定义在这个值集合上的一组操作的总称。
在我们经常使用的高级语言中,都定义了自己的基本数据类型,整形、浮点型、字符型、布尔型;现在回想起来,要是没有这些基本的数据类型,我们还真的不知道该如何的写程序,因为程序本来就是处理数据的,如果程序中都不能够表示数据,我们还如何处理数据。但是,我们从来没有关注过,为什么我定义了,两个整形数,然后就可以直接加,减,乘,除等运算了。其实这是语言的开发者为我们提供的数据类型,其实每一中数据类型,他都有着自己的取值范围,存储方法,运算。我们在自己定义新的数据类型的时候,都是建立在基本数据类型只上的。因为在数据类型的定义中,我们并没有发现关系,也就是说,他描述的是元素和运算,并没有说明他们之间的关系,可能是他们都是单个元素的关系吧!我们还发现数组并不是基本数据类型,至少在我熟悉的Java中。从而我认为数据类型不是数据结构。
抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作,是对一般数据类型的扩展。
这个链接详细的介绍了数据类型和抽象数据类型
总结:现在不去管那些理论上面的一些定义,而是从直观上面理解数据结构,在定义上面,不同的数,说法不一,从而很是容易误导我们,还有我们的目的是学习数据结构,而最后是花费了大量的时间纠结,什么是数据结构,然后 在定义上面抠来扣去,结果一无所获,从而在这里我们需要改进。以后我们从在疑问了,我认为不要首先去分析哪些定义,还是找一些好理解的说法,自己直观上理解了就好。
我认为我们在写程序的过程中,肯定会遇到数据的存储问题,每当在这时候,我们就开始需要想起我们还有数据结构,数据结构就是研究这方面的内容,我们的数据是线性的呢,还是非线性的呢,还是我们的程序需要一个临时的存储空间,并且要求数据是LIFO,还是要求这些数据有严格的先后顺序,或者是层次关系等等。总之,就是我们选择这种数据的组织方式,是为了更好的解决这个问题。最后,我认为数据结构定义的只是他的逻辑结构,只是我们在研究的过程中,需要关注这个数据和关系如何在计算机中存储和操作。