- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数组的存储和运算.ppt
* 第十一讲 数组的存储和运算 数组的定义和运算 图5.1 Am×n的二维数组 图5.2 矩阵Am×n看成n个列向量的线性表 图5.3 矩阵Am×n看成m个行向量的线性表 以上我们以二维数组为例介绍了数组的结构特性,实际上数组是一组有固定个数的元素的集合。也就是说,一旦定义了数组的维数和每一维的上下限,数组中元素的个数就固定了。 例如二维数组A3×4,它有3行、4列,即由12个元素组成。由于这个性质,使得对数组的操作不像对线性表的操作那样可以在表中任意一个合法的位置插入或删除一个元素。对于数组的操作一般只有两类: (1) 获得特定位置的元素值; (2) 修改特定位置的元素值。 基本操作: (1) InitArray(A, n, bound1, …, boundn): 若维数n和各维的长度合法,则构造相应的数组A,并返回TRUE。 (2) DestroyArray(A): 销毁数组A。 (3) GetValue(A,e, index1, …, indexn): 若下标合法,则用e返回数组A中由index1, …, indexn所指定的元素的值。 (4) SetValue(A,e,index1, …, indexn): 若下标合法,则将数组A中由index1, …, indexn所指定的元素的值置为e。 这里定义的数组,与C语言的数组略有不同,下标是从1开始的。 数组的顺序存储和实现 数组的顺序存储结构有两种:一种是按行序存储,如高级语言BASIC、 COBOL和PASCAL语言都是以行序为主;另一种是按列序存储,如高级语言中的FORTRAN语言就是以列序为主显然,二维数组Am×n以行为主的存储序列为: a11, a12, …,a1n, a21, a22, …, a2n, …, am1, am2, …, amn 而以列为主的存储序列为: a11, a21, …,am1,a12, a22, …, am2, …, a1n, a2n, …, amn 假设有一个3×4×2的三维数组A ,共有24个元素,其逻辑结构如图5.4所示。 图5.4 三维数组的逻辑结构图 三维数组元素的标号由三个数字表示,即行、列、纵三个方向。a142表示第1行,第4列,第2纵的元素。如果对A3×4×2(下标从1开始)采用以行为主序的方法存放,即行下标变化最慢,纵下标变化最快,则顺序为: a111,a112,a121,a122, …,a331,a332,a341,a342 采用以纵为主序的方法存放, 即纵下标变化最慢, 行下标变化最快, 则顺序为: a111,a211,a311,a121,a221,a321,…,a132,a232,a332,a142,a242,a342 以上的存放规则可推广到多维数组的情况。总之,知道了多维数组的维数,以及每维的上下界,就可以方便地将多维数组按顺序存储结构存放在计算机中了。同时,根据数组的下标, 可以计算出其在存储器中的位置。因此,数组的顺序存储是一种随机存取的结构。 以二维数组Am×n为例,假设每个元素只占一个存储单元,“以行为主”存放数组,下标从1开始,首元素a11的地址为Loc[1, 1],求任意元素aij的地址。aij是排在第i行,第j列,并且前面的第i-1行有n×(i-1)个元素,第i行第j个元素前面还有j-1个元素。由此得到如下地址计算公式: Loc[i, j]=Loc[1, 1]+n×(i-1)+(j-1) 根据计算公式,可以方便地求得aij的地址是Loc[i, j]。如果每个元素占size个存储单元,则任意元素aij的地址计算公式为: Loc[i, j]=Loc[1, 1] + (n×(i-1)+j-1)×size 三维数组A(1..r , 1..m , 1..n)可以看成是r个m×n的二维数组, 如图5.5所示。 图5.5 三维数组看成r个m×n的二维数组 假定每个元素占一个存储单元,采用以行为主序的方法存放,即行下标r变化最慢, 纵下标n变化最快。 首元素a111的地址为Loc[1, 1, 1],求任意元素aijk的地址。 显然,ai11的地址为Loc[i, 1, 1]=Loc[1, 1, 1]+(i-1)×m×n, 因为在该元素之前, 有i-1个m×n的二维数组。由ai11的地址和二维数组的地址计算公式,不难得到三维数组任意
文档评论(0)