数据结构经典教材之数组.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文档。上传文档
查看更多
数据结构经典教材之数组

第四章 数组 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 4.1 数组的定义和特点 定义 维数和维界 二维数组的类型定义: 等价于 typedef ElemType Array1[n]; typedef Array1 Array2[m]; typedef ElemType Array2[m][n]; Array2 A; 二维的数组 = 定长的线性表 a11 a12 a13 ... a1n a21 a22 a23 ... a2n Amxn= ...... am1 am2 am3 ... amn Amxn=((a11,a12,a13,...a1n),(a21,a22,a23,...a2n),..., (am1,am2,am3,...amn)) 数组的顺序表示和实现 除了初始化和销毁之外, 数组一般只有存取操作和修改元素值的操作. 通常不作删除和插入. 行序为主序:(C语言,PASCAL, BASIC等) Amxn=(a11,a12,a13,...a1n,a21,a22,a23,...a2n,...am1,am2,am3,...amn) LOC[1,1] 为基地址: LOC[i,j] = LOC[1,1] + (n*(i-1)+j-1)*L (1=i=m, 1=j=n, 每个数据元素占L个存储单元) LOC[3,4] = LOC[1,1] + (5*(3-1)+4-1)*L = 1000 + 13 * 2 = 1026 LOC[0,0] 为基地址: LOC[i,j] = LOC[0,0] + (n*i+j)*L (0=im, 0=jn, 每个数据元素占L个存储单元) LOC[i,j,k] = LOC[0,0,0] + (n*h*i+ h*j + k)*L (0=im, 0=jn, 0=kh, 每个数据元素占L个存储单元) 一般n维数组的行主元存储地址计算公式 b1,b2,...,bn是n维的维界,数组元素A(j1,j2,...,jn)的存储位置为 LOC[j1,j2,...jn]= LOC[0,0,...,0] + (b2?b3?...?bn?j1 + b3?...?bn?j2 + ...... + bn?jn-1 + jn )?L n-1 n = LOC[0,0,...,0] + ( ? ji ? bk + jn)?L i=1 k=i+1 例: 在C语言中,设 数组A[5][6][7][8]的首地址为 2000, 每个元素占2个字节; 求元素A[3][4][5][4]的地址. LOC[3,4,5,4] = 2000 + (6*7*8*3 + 7*8*4 + 8*5 + 4)*2 = 2000 + ( 336*3 + 56*4 + 8*5 + 1*4)*2 = 2000 + (1008 + 224 + 40 + 4)*2 = 4552 数组顺序存储的表示和实现 Status InitArray(Array A, int dim, ...) { va_list ap; if(dim1 || dim MAX_ARRAY_DIM) return ERROR; A.dim = dim; A.bounds = (int * ) malloc(dim*sizeof(int)); if(!A.bounds) exit(OVERFLOW); elemtotal = 1; va_start(ap, dim); for(i =0 ; idim; ++i){ A.bounds[i] = va_arg(ap,int); if(A.bounds[i] 0) return UNDERFLOW; elemtotal

文档评论(0)

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

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

1亿VIP精品文档

相关文档