第5章-数组和广义表.ppt

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第五章数组和广义表5.1数组的定义5.2数组的顺序表示和实现5.3矩阵的压缩存储5.4广义表的定义5.1数组的定义ADTArray{数据对象:i=1,2,…,nD={|n(0)称为数据的维数,bi是数组第i维的长度,是数组元素的第i维下标,∈Elemset}数据关系:R={R1,R2,…Rn}Ri={,|,∈Di=2,…,n}基本操作:InitArrary(A,n,bound1,…,boundn)DestroyArray(A)Value(A,e,index1,…,indexn)Assign(A,e,index1,…,indexn)}ADTArray5.2数组的顺序表示和实现类型特点:只有引用型操作,没有加工型操作;数组是多维的结构,而存储空间是一个一维的结构。用一组地址连续的存储单元存放数组的每个元素。有两种顺序映象的方式:1)以行序为主序(低下标优先);2)以列序为主序(高下标优先);n维数组的映像函数若每个元素占L个存储单元,二维数组A中任一元素aij的存储位置为:LOC(i,j)=LOC(0,0)+(b2*i+j)L其中:LOC(0,0)是a00的存储位置,即数组A的基址。推广到n维数组时:LOC()=LOC(0,0,…,0)+其中,1i=n以上公式称为n维数组的映像函数,数组元素的存储位置是其下标的线性函数。一旦确定了数组的各维的长度,ci就是常数。数组的顺序存储表示和实现:#includestdarg.h#defineMAX_ARRAY_DIM8typedefstruct{ElemType*base;//数组元素基址intdim;//数组维数int*bounds;//数组维界基址int*constants;//数组映像函数常量基址}Array;StatusInitArray(ArrayA,intdim,…){if(dim1||dimMAX_ARRAY_DIM)returnERROR;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)returnUNDERFLOW;elemtotal*=A.bounds[i];}va_end(ap);A.base=(ElemType*)malloc(elemtotal*sizeof(ElemType));if(!A.base)exit(OVERFLOW);A.constants=(int*)malloc(dim*sizeof(int));if(!A.constants)exit(OVERFLOW);A.constants[dim-1]=1;//求数组映像函数的常数cifor(i=dim-2;i=0;i--)A.constants[i]=A.bounts[i+1]*A.constants[i+1];returnOK;}St

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档