多维数组和广义表.pptVIP

  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文档。上传文档
查看更多
第一页,共二十八页,2022年,8月28日 二维数组中,每个数据元素对应一对数组下标,在行方向上和列方向上都存在一个线性关系,即存在两个前驱和两个后继。也可看作是以线性表为数据元素的线性表。 n维数组中,每个数据元素对应n个下标,受n个关系的制约,其中任一个关系都是线性关系。可看作是数据元素为n-1维数组的一维数组。 因此,多维数组是对线性表的扩展:线性表中的数据元素本身又是一个多层次的线性表。 5.1 多维数组 第二页,共二十八页,2022年,8月28日 多维数组用一维的存储单元存放,需约定次序。C语言是行优先顺序。 二维数组中任一元素aij的存储地址: n维数组 Loc(aij)=Loc(a00)+(n*i+j)*d 第三页,共二十八页,2022年,8月28日 5.2 矩阵的压缩存储 压缩存储 使用一维数组存储矩阵,并且在一维数组中为多个值相同的元素只分配一个存储空间,对零元不分配空间。 第四页,共二十八页,2022年,8月28日 5.2.1 特殊矩阵 对称矩阵: aij=aji 0≤i,j≤n-1 压缩存储方法:为每一对对称元分配一个存储空间 将下三角的元素,按行存储到一维数组sa中,共有n(n+1)/2个存储单元, aij在一维数组中的位置k为: i(i+1)/2+j 当i=j; j(j+1)/2+i 否则 第五页,共二十八页,2022年,8月28日 特殊矩阵 三角矩阵:上(下)三角中的元素均为常数c或0 压缩存储方法:只存储上(下)三角元素。 下三角:k=i*(i+1)/2+j (i=j); k=n*(n+1)/2 (ij) 上三角:k=(i/2)*(2n-i+1)+j-i (i=j); k=n*(n+1)/2 (ij) 注意:k, i,j从零开始 第六页,共二十八页,2022年,8月28日 特殊矩阵 对角矩阵:所有非零元都集中在以主对角线为中心的带状区域中 压缩方法:压缩存储到一维数组sa[ ]中,三对角矩阵有3n-2个元素。 第七页,共二十八页,2022年,8月28日 5.2.2 稀疏矩阵 已知矩阵Am×n,t为非零元个数,若t(m×n),则称Am×n 为稀疏矩阵。 用三元组(i,j,v)存储行和列的位置及非零元值。 第八页,共二十八页,2022年,8月28日 1. 三元组表 顺序存储方式存储稀疏矩阵的三元组. 第九页,共二十八页,2022年,8月28日 三元组表结构定义 #define smax 16 //非零元个数最大值 Typedef int datatype typedef struct { int i,j; //行下标和列下标 datatype v; } node; typedef struct { node data[smax]; //非零元三元组表 int m,n,t; //行数、列数、非零元个数 }SpMatrix; SPMatrix *a,*b; 第十页,共二十八页,2022年,8月28日 三元组表稀疏矩阵的转置运算 第十一页,共二十八页,2022年,8月28日 稀疏矩阵的转置 Spmatrix *transmat(a) Spmatrix *a; { int ano,bno,col; Spmatrix *b; b=malloc(sizeof(Spmatrix)); b-m=a-n;b-n=a-m;b-t=a-t; if(b-t0) { bno=0; for(col=0;cola-n;col++) for(ano=0;anoa-t;ano++) if(a-data[ano].j==col) { b-data[bno].i= a-data[ano].j; b-data[bno].j= a-data[ano].i; b-data[bno].v= a-data[ano].v; bno++; } } return b; } 第十二页,共二十八页,2022年,8月28日 2.十字链表 当矩阵中非零元素的个数和位置经过运算后变化较大时,就不宜采用顺序存储结构,而应采用链式存储结构来表示三元组。 行链表与列链表都是带表头结点的循环链表。 第十三页,共二十八页,2022年,8月28日 元素结点 rptr——指向同一行中下一个非零元素的

文档评论(0)

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

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

1亿VIP精品文档

相关文档