数组(array type)指的是包括某种相同数据(数组元素的类型相同)的连续空间②,它是顺序地址存储这一概念的自然延伸③。首先我们认为Byte、Word等基础数据类型是受位宽限制的顺序地址存储,当我们把位宽限制这一条件去掉——或通过长度值来指定连续区域的大小——之后,就得到了数组的概念。由于它自然延伸了(但未改变)顺序地址存储的概念,因此它也可以作用于上述这些基础类型。例如:□ DWORD,等义于长度为4的字节数组;口BYTE,等义于长度为8的位数组;□ INT64,等义于长度为64的位数组,或长度为8的字节数组,或……基于此,我们也可以用数组这一概念来统一所有的基础类型,这最终可以将任何数据理解为位数组(bit array)。当然,需要强调,这里的数组是指一个连续空间中的数组,否则就与我们此前的抽象不一致了。
然而,我们留意上述的“某种相同数据”这一抽象限制条件,也就意味着,我们必然会面临“连续空间中包含某几种不同数据”的需求。我们做出这一“必然”判断的原因是,我们的需求总是问题的全集,而非某个部分(所谓可能出现的,必将出现)。因此对问题的某一个分类中的所有可能性施以数据抽象,则它必然可以表达问题的全集,以及满足其背后的全部需求。推论上述逻辑:□设定:在连续空间(S)中,要么包含同一种数据(m),要么包含不同种数据(n);□如果存有混杂,则可以将它分解为多个连续的连续空间(S),使S;符合上述设定;□如上,我们总是可以用m与n来表示连续空间中的所有数据。
结构体(struct type)指的就是包括某几种不同数据的连续空间④。这一概念是对数组的补充,他们一起构成了“用基础数据类型”来复合其他类型的全部可能性。
①与此前讨论的地址索引问题类似,这个连续区域的实际大小也受限于可用的、能被编码的地址大小。②我们这里先讨论程序设计中一个狭义的数组概念,之后的讨论中会再进一步完善它。③理解为抽象概念中的“引申”。
④Struct type一般译作“结构(类型)”,这里用“结构体”以与本书中讨论的、普遍含义上的“(数据)结构”区别开来。一些语言中,结构体也被称为记录,这同样也是数据库中“记录”称谓的源起——后面也将讨论到结构体与数据库之间的抽象关系。yipindushu.com
【五】
上述的“全部可能性”事实上还应当包括一种泛义的数组,亦即是元素的类型为某种结构体的数组。在数据结构上,它通常被称为顺序表(sequential list,或list)。
设数组A的每一个元素的数据类型为T,基于此前的讨论,元素(结构体)A[n]必然有一个确定的长度值Size(T)。由此,数组的长度——顺序表中的记录数RecCount——决定了整个数据所占用的连续空间的大小:RecCount * Size(T)在该连续空间中,可以通过数组下标——顺序表中的记录号RecNo——来访问任意元素,它的地址也是确定的:RecNo * Size(T)其中RecNo的取值空间为一个序列值[0...RecCount-1]。
顺序表具有边界判断简单、能快速存取指定位置的特点,到目前为止仍然是关系型数据库的最基本的、最佳的实现方案。关系型数据库中的表格(table)与顺序表在抽象含义上是相同的:每行——每笔记录——的字段列即是数组元素的结构类型定义,行号(RowId)即数组元素的索引下标。因些,结构化查询语言(SQL)中的一行代码:select * from A where RowId = 5与将A作为数组来存取的时候所采用的操作:A[5]是完全等义的。
综上所述,我们事实上可以用两种方法来统一顺序存储,由此将一个无限大的空间视作空间连续的数据,并使用地址来存取其中任何数据分量。这两种方法是:□将包括某种相同数据的连续空间视为数组A;□将包括某几种不同数据的连续空间视为结构S。由于S本身是连续的,所以:□ S可以视为有且仅有单个元素的A。
【所以:】
□因此整个空间可以统一为A。
在得到这样一种数组概念的同时,我们也找到了在与计算系统交互时,表示数据的基本方式。它引申数列概念以通过下标索引值来定位数据分量,因此也被称为索引数组(index array)。
在不讨论存储的、纯粹抽象的数据结构的概念集中,我们将索引数组的概念加上结构体,就看到了顺序表(list);加上操作方式,就看到了栈(stack,LIFO)与队列(queue,FIFO)。
版权声明
本站素材均来源与互联网和网友投稿,欢迎学习分享
【节数以及对数据的性质的思考16:http://www.yipindushu.com/xuexifangfa/16472.html
推荐文章
01-20
1 如何学习高中英语02-13
2 高中阶段的学习方法01-08
3 教给孩子正确的学习方法12-27
4 高数的学习方法03-01
5 插画如何学习