[2018年必威体育精装版整理]05数组和广义表1.docVIP

[2018年必威体育精装版整理]05数组和广义表1.doc

  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文档。上传文档
查看更多
[2018年必威体育精装版整理]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) 增加层的关系 基本操作:取值、赋值。 第二节 数组结构的顺序存储结构 数组结构是多维的,内存地址是一维的。 存储方式:行主序,列主序 以行主序为例: 一维: 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、初始化数组结构 void 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) { printf(“overflow!”); return; } 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) { printf(“overflow!”); return; } printf(“OK!”); } 2、取值 ElemType Array_GetValue(Array A,int dim_i[])//dim[]存放要求元素的下表 { int offset; for(offset=0,i=0;iA.dim;i++) offset+=A.constants[i]* dim_i[i]; return(*(A.base+offset)); } 补充:计算二维数组元素地址的通式 设一般的二维数组是A[c1..d1, c2..d2],这里c1,c2不一定是0 一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 个字节。 第三节 矩阵的压缩存储 矩阵的用途: 大型方程组求解、高次方程求解 真正有用的计算是矩阵的计算。 从空间/时间复杂度出发: 一、特殊矩阵 利用矩阵的特征,尽量减少数据的存储量。 对称矩阵 aij=aji NxN矩阵的存

文档评论(0)

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

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

1亿VIP精品文档

相关文档