第四章串、数组和广义表B.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 数组 二维数组的特点: template class T arrayT::array(int sz) { if (sz=0) throw 数组的长度非法!; size=sz; aelem=new T[size]; if (aelem==NULL) throw 内存分配失败!; } template class T arrayT::array(const arrayT a) //由另一数组来构造 { int size=n=a.size//当前数组的长度 aelem=new T[size]; if (aelem==NULL) { size=0; throw 内存分配失败!; } for(int i=0;in;i++) aelem[i]=a.elem[i];//复制数组} template class T arrayT arrayT::operator=(const arrayT a) //数组整体赋值 { int n; if (aelem!=NULL) delete [] aelem;//释放原有的存储单元 size=n=a.size; aelem=new T[size]; if (aelem==NULL) { size=0; throw 内存分配失败!; } T *sa=a.aelem;//源数组首地址 T *de=aelem;//当前数组首地址 while(n--) *de++=*sa++;//复制数组; return *this; } template class T void arrayT::resize(int sz)//修改数组大小 { //修改数组长度,使原长度改为sz,且把原数组元素拷贝到新数组元素中, //释放原数组空间,若szsize,则拷贝原数组的前sz个元素 T *nea; if (sz=0) throw 数组的长度非法!; if (sz!=size) { nea=new T[sz];//建立新数组 } 例2、已知二维数组Am,m按行存储的元素地址公式是: Loc(aij)= Loc(a11)+[(i-1)*m+(j-1)]*K , 按列存储的公式是? Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*K (尽管是方阵,但公式仍不同) 若是n维数组,其中任一元素的地址该如何计算? Loc(j1,j2,…jn)=LOC(0,0,…0)+ templateclass T marrayT::marray(int dm) { int i; if(dm1||dmMARRAY_DIM) //dim不能大于8小于1 throw 维数不合理!; dim=dm;//初始化存储各维信息存储区域 bounds=new int[dim]; if (bounds==NULL) throw 存储空间申请有误!; //若各维长度合法,则存入A.bounds,并求出A的元素总数elemtotal etotal=1; for(i=0;idim;i++){ cout请输入i维的大小endl; cinbounds[i]; if(bounds[i]0) throw 维数大小不正确!; etotal *=bounds[i];//求数组元素的个数 } base=new T[etotal]; if(base==NULL) throw 存储空间申请有误!; constants=new int[dim]; //求Ci时仅于维数dim、bi有关(仅求一维数组下标,所以L可视为1) if(constants==NULL) throw 存储空间申请有误!; constants[dim-1]=1;//cn-1 for(i=dim-2;i=0;--i) constants[i]=bounds[i+1]*constants[i+1]; //其中Cn-1=L, Ci=bi+1×Ci+1,0i≤n-1 } template class T long int marrayT::Locate() { int i,ind;long int off; //从键盘输入合法的各下标值, //并求其与起始元素的相对地址off,初值为of

文档评论(0)

awang118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档