05数组与广义表1.docVIP

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

殷忧启圣,大难兴邦 第五章 数组和广义表 继续增加线性表结构的内涵。 数组结构 每个子结构是由基本元素组成的大小均等的线性表。 广义表 结构 每个子结构或是基本元素,或是由基本元素组成的大小不等的线性表结构。 第一节 数组的逻辑结构 1_Array=(D, S, P) 定长线性表 D = {ai| ai∈ElemSet, i=0,1,2,…, n-1} S = {ai-1,ai| ai-1,ai∈D, i=1,2,…,n-1} 2_Array=(D, S, P) 定长线性表,每个元素又是定长线性表。 D = {ai,j| ai,j∈ElemSet, i=0,1,…,n1-1; j=0,1,…,n2-1} S = {ROW,COL} ROW={ai,j-1, ai,j| i=0,1,…,n1-1; j=1,…,n2-1} COL={ai-1,j, ai,j| i=1,…,n1-1; j=0,1,…,n2-1} 3_Array=(D, S, P) 增加层的关系 二维数组:分量为一维数组的一维数组。 三维数组:分量为二维数组的一维数组。 数组一旦被定义,它的维数和维界就不再改变。 基本操作:取值、赋值。 第二节 数组结构的顺序存储结构 数组结构是多维的,内存地址是一维的。 二维数组a[n1][n2]的存储方式: 行主序 a0,0 a0,1 … a0,n2-1 a1,0 … a1,n2-1 … an1-1,n2-2 an1-1,n2-1 列主序 a0,0 a1,0 … an1-1,0 a0,1 … an1-1,1 … an1-2,n2-1 an1-1,n2-1 示例 行主序 列主序 多维数组的存储方式: 行主序 先排最右下标,从右到左; 列主序 先排最左下标,从左向右。 以行主序为例,计算数组元素的地址: 一维: LOC(ai) =base+i 二维(MxN): LOC(ai,j) =base+i*N +j 三维(MxNxP): LOC(ai,j,k) =base+i*N*P +j*P +k 四维(MxNxPxQ):LOC(ai,j,k,l)=base+i*N*P*Q+j*P*Q+k*Q+l Typedef struct { ElemType *base; int dim;     维数 int *bounds;   各维的维界 int *constants; 各维成员的大小 }Array; 例:数组A[3,4,5,6]的存储结构 A.dim=4 A.bounds[]={3,4,5,6} A.constants[]={120,30,6,1} A[i,j,k,l]的地址: A.base+(i*120+j*30+k*6+l) 1、初始化数组结构 Status Array_Init(Array A,int dim,int bounds[]) { A.dim=dim; A.bounds=(int *)malloc(dim*sizeof(int)); A.constants=(int *)malloc(dim*sizeof(int)); if(!A.bounds || !A.constants) return(OVERFLOW); for(i=0;idim;i++) A.bounds[i]=bounds[i]; for(A.constants[dim-1]=1,i=dim-2;i=0;i--) A.constants[i]=A.bounds[i+1]*A.constants[i+1]; //开辟数组空间 elemtotal=A.bounds[0]*A.constants[0]; A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType)); if(!A.base) return(OVERFLOW); return(OK); } 2、取值 ElemType Array_GetValue(Array A,int dim_i[]) { int offset; for(offset=0,i=0;iA.dim;i++) offset+=A.constants[i]* dim_i[i]; return(*(A.base+offset)); } 第三节 矩阵的压缩存储 矩阵的用途: 大型方程组求解、高次方程求解 真正有用的计算是矩阵的计算。 从空间/时间复杂度出发,讨论矩阵的存储结构。 一、特殊矩阵 利用矩阵的特征,尽量减少数据的存储量。 1、对称矩阵 aij=aji

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档