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

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

第五章数组和广义表5.1数组类型定义数据对象多维数组D={aj1,j2,..jn|j=1,2,..,bi-1,i=1,2,..,n,n为维数}数据关系下标存在位序,显线性关系一维数组存在一个线性关系二维维数组存在行和列二个线性关系n维数组存在n个线性关系例:一维数组数据对象D={ai|属于D,0=i=n-1}数据关系R{ai-1,ai|ai,ai+1属于D,0=i=n-1}例:二维数组数据对象D={aij|aij属于D,0=i=m-1,0=j=n-1}数据关系R={R1,R2}//行和列上有关系R1=ROW={ai,j-1,aij,|ai,j-1,ai,j属于D,0=i=m-1,0j=n-1}R2=COL={ai-1,j,ai,j|ai,j-1,ai,j属于D,0i=m-1,0=j=n-1}元素和一组下标有对应关系例:三维数组数组基本操作(二维示例)initArray(a,bound1,bound2))destroyArray(a)value(a,e,index1,index2)assign(a,e,index1,index2)数组元素没有插入和删除操作value(a,e,index1,index2)给定一组下标,确定元素值前置条件a是二维数组(n维数组给定n个下标)操作结果若下标不越界,则返回OK和e(存放指定位置的元素值)。assign(a,e,index1,index2)前置条件a是二维数组操作结果若下标不越界,则将e存放数组的指定位置,返回OK数组基本操作特点不改变结构的操作仅改变数组元素的值5.2数组顺序表示和实现数组是多维结构,而存储空间是一个一维的结构。求n维下标变换成一维下标的公式例:二维数组存储只用顺序映像表示以行序为主序(低下标优先)和以列序为主序例:三维数组存储ai,j,k,设i的范围0-1,j的范围0-2,k的范围0-1(a[2,3,2])),则以行序为主序(低下标优先)的排列是:a0,0,0,a0,0,1,a0,1,0,a0,1,1,a0,2,0,a0,2,1,a1,0,0,a1,0,1,a1,1,0,a1,1,1,a1,2,0,a1,2,1数组元素地址一维数组元素ai的地址loc(i)=loc(0)+i*len//len是元素的长度二维数组可看作m个一维数组(n个元素)二维数组a中任一元素aij的存储位置loc[i,j]=loc[0,0]+(i*n+j)*len//n:列的数目多维数组依次类推:loc[i1,i2,i3...in]=loc(0)+((i1*b2*b3*..*bn)+(i2*b3*b4..*bn)+..in-1*bn+in)*len//bi:i维元素长度例:整数数组a[9,3,5,8],每个元素4字节,首地址100,a3125的地址是(低下标优先):LOC(3,1,2,5)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784在一维存储时,a[2,1,1,2]对应的一维下标2*3*5*8+1*5*8+1*8+2=290二维数组的顺序存储类型typedefintElemType;//若元素类型为整型typedefstruct{ ElemType*base; intm,n;//m行,n列}Array;初始化StatusinitArray(Arraya,intm,intn){ a.m=m;a.n=n; a.base=(ElemType*)malloc(m*n*sizeof(ElemType));returnOK;}元素赋值Statusassign(Arraya,ElemTypee,inti,intj){ a.base[a.n*i+j]=e;//使用地址变换公式returnOK;}查询元素locate(a,e,addr)找二维数组中的元素e,如存在则返回相对位置。Statuslocate(Arraya,ElemTypee,intaddr){ inti; addr=0; for(i=0;ia.m*a.n;++i) if(a.base[i]==e){ addr=i; returnOK; } returnERROR;}例:seArray.c5.3稀疏矩阵的压缩存储稀疏矩阵压缩存储:对0不分配存储空间稀疏矩阵定义m*n列的矩阵含t个元素一般认为t/(m*n)=0.05为稀疏矩阵二维数组表示

文档评论(0)

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

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

1亿VIP精品文档

相关文档