[工学]DS05.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]DS05

第五章 数组和广义表 5.1 数组的定义 数组和广义表可看成是一种特殊的线性表,其特殊在于,表中的数据元素本身也是一种线性表。 数组(Array)是由n(n1)个相同类型数据元素a0,al,…ai…,an-1构成的有限序列。其中数组中的数据元素ai是一个数据结构,即ai可以是线性表中的一个元素,本身也可以是一个线性表,而线性子表中的每一个数据元素还可以再分解…… 。根据数组元素ai的组织形式不同,数组可以分为一维数组、二维数组以及多维数组。 如C语言中二维数组的类型定义: typedef ElemType Array2[m][n]; 等价于 typedef ElemType Array1[n]; typedef Array1 Array2[m]; 因此定义二维数组A可如右: Array2 A; 数组具有以下性质: 1.数组中的数据元素数目固定。一旦定义了一个数组,其数据元素数目不再有增减变化。 2.数组中的数据元素具有相同的数据类型。 3.数组中的每个数据元素都和一组惟一的下标值对应。 4.数组是一种随机存储结构。可随机存取数组中的任意数据元素。 数组的抽象数据类型 ADT Array { 数据对象:D = {aj1j2...jn | ji =0,...,bi -1, i=1,2,..,n n(0)称为数组的维数,bi是数组第i维的长度, ji是数组元素的第i维下标, aj1j2...jn?Elemset} 数据关系: R={R1 , R2 ... Rn} Ri = {< aj1...ji...jn, aj1...ji+1...jn >| 0 ? jk ? bk -1, 1 ? k ? n 且k ? i, 0 ? ji ? bi-2, i=2,...,n, aj1...ji...jn, aj1...ji+1...jn ?D}。 基本操作: InitArray(A,n,bound1,bound2,...,boundn); DestroyArray (A); Value(A,e,index1,index2,...,indexn); Assign(A,e, index1,index2,...,indexn) }ADT Array 5.2 数组的顺序表示和实现 由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中。 又由于对数组一般不做插入和删除操作,也就是说,数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。 对于二维以上的数组,由于计算机的存储单元是一维线性结构,如何用线性的存储结构存放多维数组元素就有行/列次序问题。 常用两种存储方法: 以行序(row major order)为主序的存储方式 以列序(column major order)为主序的存储方式。 ⑴行优先顺序——将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。以二维数组为例,按行优先顺序存储的线性序列为: a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn 在PASCAL、C语言、BASIC中,数组就是按行优先顺序存储的。 ⑵列优先顺序——将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量之后,A的m*n个元素按列优先顺序存储的线性序列为: a11,a21,…,am1,a12,a22,…am2,……,an1,an2,…,anm 在FORTRAN语言中,数组就是按列优先顺序存储的。 [例5-1] 二维数组Am×n按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。 元素aij的存储地址应是数组的基地址加上排在aij前面的元素所占用的单元数。因为aij位于第i行、第j列,前面i-1行一共有(i-1)×n个元素,第i行上aij前面又有j-1个元素,故它前面一共有(i-1)×n+j-1个元素,因此,aij的地址计算函数为: LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d 同样,三维数组Aijk按“行优先顺序”存储,其地址计算函数为: LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p +(k-1)]*d 上述讨论均是假设数组各维的下界是1,更一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是1。aij前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上aij前一共有j-c2个元素,

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档