




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
殷忧启圣,大难兴邦第五章 数组和广义表继续增加线性表结构的内涵。数组结构每个子结构是由基本元素组成的大小均等的线性表。广义表结构每个子结构或是基本元素,或是由基本元素组成的大小不等的线性表结构。第一节 数组的逻辑结构 1_Array=(D, S, P)定长线性表 D = ai| aiElemSet, i=0,1,2, n-1 S = | ai-1,aiD, i=1,2,n-1 2_Array=(D, S, P) 定长线性表,每个元素又是定长线性表。D = ai,j| ai,jElemSet, i=0,1,n1-1; j=0,1,n2-1S = ROW,COLROW=| i=0,1,n1-1; j=1,n2-1COL=| i=1,n1-1; j=0,1,n2-13_Array=(D, S, P) 增加层的关系 二维数组:分量为一维数组的一维数组。 三维数组:分量为二维数组的一维数组。数组一旦被定义,它的维数和维界就不再改变。基本操作:取值、赋值。第二节 数组结构的顺序存储结构数组结构是多维的,内存地址是一维的。二维数组an1n2的存储方式:行主序a0,0a0,1a0,n2-1a1,0a1,n2-1an1-1,n2-2an1-1,n2-1列主序a0,0a1,0an1-1,0a0,1an1-1,1an1-2,n2-1an1-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+lTypedef struct ElemType *base; int dim; 维数 int *bounds; 各维的维界 int *constants; 各维成员的大小Array;例:数组A3,4,5,6的存储结构 A.dim=4 A.bounds=3,4,5,6 A.constants=120,30,6,1 Ai,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;i=0;i-)A.constantsi=A.boundsi+1*A.constantsi+1; /开辟数组空间elemtotal=A.bounds0*A.constants0; 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;i=j: k=i*(i+1)/2+j若i Sk, k=i(2d+1)+d+(j-i)改进方案:S(2d+1)n-2d,去掉数组前后2d个0。aij = Sk, k=i(2d+1)+(j-i)4、小结练习的意义:培养摸索数据规律的感觉。二、稀疏矩阵之三元组表稀疏因子=t/(m*n)稀疏矩阵:稀疏因子T (以T为中心,按需点菜) =M.data下标T.dataijeije0130001101010110301340212-521-532320245043140322053330333064250void TSMatrix_Transpose(TSMatrix M,TSMatrix &T) int k,col,i;T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;for(k=0,col=0; colM.nu; col+) /找M中所有列 for(i=0; iT (以M为中心,按位就座)辅助数据结构:num:M中每列(T中每行)的三元组个数。=pos:T中每行第一个三元组的下标。pos0=0;posj=posj-1+numj-1; j1,M.nu-1 =下标01234num12121pos01346 M.data下标T.dataijeije0130001101010110301340212-521-532320245043140322053330333064250void TSMatrix_FastTranspose(TSMatrix M,TSMatrix &T) int i,j,k,numMAX,posMAX;T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; /统计M中每列的三元组个数 for(i=0;iM.nu;i+) numi=0;for(i=0;iM.tu;i+) numM.datai.j+;/计算pos数组for(pos0=0,i=1;iM.nu;i+) posi=posi-1+numi-1;/快速转置for(i=0;i十字链表。三、稀疏矩阵之十字链表十字链表的存储结构:真正等价于矩阵的逻辑结构。1、十字链表typedef struct OLNode /结点类型 int i,j; ElemType e; struct OLNode *right,*down;OLNODE; typedef struct int mu,nu,tu; OLNODE *rhead,*chead; /行、列头结点表CrossList;图示:4x5矩阵的十字链表,含非0数:(1,1:1) (3,1:2) (3,4:3)用right构成行链表,用down构成列链表。2、建立、打印十字链表的算法按行主序打印矩阵Mvoid CrossList_Print(CrossList M) OLNODE *p; int i; printf(%d,%d,%dn,M.mu,M.nu,M.tu); for(i=0; iright) printf(%d,%d:%dn,p-i,p-j,p-e);根据三元组顺序表T,建立十字链表Mvoid CrossList_Create(CrossList &M, TSMatrix T) int i; CrossList_Init(M,T.mu,T.nu); for(i=0; iT.tu; i+) / 插入各个三元组结点 CrossList_Insert(M, T.datai);初始化十字链表结构Mvoid CrossList_Init(CrossList &M,int mu,int nu) int i;M.mu=mu; M.nu=nu; M.tu=0; /初始化行头结点表、列头结点表 M.rhead=(OLNODE *)malloc(M.mu*sizeof(OLNODE); for(i=0; iM.mu; i+) M.rheadi.right=NULL; M.chead=(OLNODE *)malloc(M.nu*sizeof(OLNODE) for(i=0; iright;p; pre=p,p=p-right)if(p-j = Item.j) break; / 定位 if(p=NULL | p-j Item.j) newp=(OLNODE *)malloc(sizeof(OLNODE); newp-i=Item.i; newp-j=Item.j; newp-e=Item.e; newp-right=p; pre-right=newp; M.tu+; else / 遇到同类项 p-e+=Item.e; if(p-e=0) pre-right=p-right; / 将*new结点插入列链表中 for(pre=&M.cheadItem.j,p=pre-down; p; pre=p,p=p-down)if(p-i = Item.i) break; / 定位 if(p=N
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业技术推广服务责任协议
- 网络工程网络通信理论测试
- 深度学习 课件 第0章-课程简介
- 工程项目管理文献回顾试题及答案
- 投资项目的资金流动分析试题及答案
- 人工智能技术在教育领域的应用合作协议
- 智慧供应链管理 课件 第五章 智慧物流管理
- 2024年固废污染治理项目投资申请报告代可行性研究报告
- 房产小区测试题及答案
- 着眼未来水利水电工程考试试题及答案
- 灭火和应急疏散流程图
- 毒蛇咬伤防治
- 不再种植桉树承诺书
- 氧气应急处置卡
- YX51-380-760型金属屋面板专项施工方案(32页)
- sql优化-oracle数据库ppt课件
- 肾癌-诊疗ppt
- 土地模板-市场比较法
- 附5北京理工大学本科毕业生德育答辩论
- 中国疾病预防控制中心健康体检表
- 康复评定——感觉功能评定
评论
0/150
提交评论