数据结构在计算机中的表示成为数据的物理结构,这个物理结构很容易使人疑惑,我们可以理解数据是储存在计算机的硬件中,当然硬件可以储存许多不同的数据,可以删除之后重新储存新的,那么这个物理结构的本质是静态的。一个数据通过许许多多的01位进行表述,一个数据元素(对象)的01表示称为节点或者元素,当然我们知道数据元素是由许多不可分割的数据项组成,那么数据项所对应的01位串称为数据域。所以我们可以认为节点和元素是数据元素的某种表现形式,具体是在计算机中的表现形式。
数据元素之间是有相对的关系的,这种相对关系在计算机中有两种不同的表示方法,其中第一个是key value的形式,地址中连续的一片表示其中的数据元素存在着相关联系。另外一种表达方式是通过储存地址的方式,即内存中储存地址,通过查询地址中的元素来实现数据元素之间的相对关系。
我们把前面这种key-value的数据元素的相关关系称为顺序映像,另外一种通过指针的形式称为非顺序映像,也叫链式储存结构,我们可以想象指针就像是守望先锋中屠夫的钩子,就好比指针,勾中哪个就保证了关系的存在。
数据类型这个概念我想大家都知道,比如许多程序语言中的int,float等,数据类型的本质是什么呢?实际上数据类型的本质是我们认为该数据元素的可能取值范围以及所有可能的操作的总和。这和马斯克将人的本质看成是与该人有关系的社会关系的总和是一个道理。
数据类型可以分为两个大类,一种是不可分割的非结构的原子类型,这种数据类型往往是计算机自带的,最基本的类型,比如整型。另外一种是可以分割的结构类型,这类数据类型的特点是将一些基本的不可分割的数据类型进行某种结构的组合而形成的。
抽象的数据类型: 抽象的数据类型是一种定义在数学逻辑上的数据类型,与具体在什么机器上操作没有关系,也就是说不管什么年代,只要你定义的类型的数据逻辑不变,这个数据类型就不变,就好比是从A到B,只在乎起点和终点,并不在乎之间的过程。这类抽象的数据类型在我们编写的模块的复用率上面作用重大,我们都知道,如果一个人在编写一个模块的时候,如果在在乎操作的细节,那么其他人在想使用该模块的时候,其余人就碰到了困难,这对程序的复用是非常不利的,所以我们在定义一个函数的时候,我们往往在函数说明的时候要用尽可能抽象的数据类型进行说明,这样别人能够很快明白这个函数可以做什么,而在函数实现的内部,我们要尽可能的将操作细节写出来,这样别人在进一步读我们的程序的时候,就能知道我们的代码是什么意思了。