网站大量收购独家精品文档,联系QQ:2885784924

数据结构_03级6.ppt

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

第五章 数组和广义表 数组、广义表可看成是线性表的推广,其数据元素也是一个数据结构。 §5.1 数组 类型定义 P90,ADT 数组的顺序存储(假设一个元素占一个存储单元) 一维数组 loc(ai)=loc(a1)+i-1 二维数组m×n loc(aij)=loc(a11)+ n(i-1)+(j-1) 三维数组l×m×n loc(aijk)=loc(a111)+m*n(i-1)+n(j-1)+(k-1) §5.2 矩阵的压缩存储 §5.2.1 特殊矩阵 §5.2 矩阵的压缩存储 §5.2.1 特殊矩阵 下三角 上三角 三对角 §5.2.2稀疏矩阵的三元组存储 稀疏矩阵:在一个矩阵中,大多数元素的值为0,而非0元的分布又没有规律。 设在的矩阵A(m×n)中,有s个非零元素,令 e=s/(m*n),称e为矩阵的稀疏因子,通常认为e≦0.05时称之为稀疏矩阵。 三元组表:稀疏矩阵的一种压缩存储方式,顺序存储结构。即三元组顺序表。 用三元组(i,j,e)表示一个元素 3 0 0 0 0 三元组表 i j e 0 0 0 0 0 1 1 3 0 -4 0 0 5 3 2 -4 M= 2 0 0 0 0 3 5 5 0 0 0 6 0 4 1 2 1 0 0 0 7 5 4 6 6 1 1 6 5 7 typedef struct{ int i,j;//行列号 elemtype e;//aij }triple; typedef struct{ int m,n,t;//m总行数,n总列数,t非0元个数 triple data[maxsize];//三元组表 }TSmatrix; 基本运算 求M的转置矩阵T 3 0 0 0 0 3 0 0 2 0 1 0 0 0 0 0 0 0 -4 0 0 0 M= 0 -4 0 0 5 T= 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 6 0 0 0 0 6 0 0 0 5 0 0 7 1 0 0 0 7 M.data i j e T.data i j e 1 1 3 1 1 3 3 2 -4 1 4 2 3 5 5 1 6 1 4 1 2 2 3 -4 5 4 6 4 5 6 6 1 1 5 3 5 6 5 7 5 6 7 方法1:p99,按T.data中三元组的顺序转置,双重循环,O(n*t) 方法2:按M.data中三元组的顺序转置,即每取出一个M.data中的三元组,直接放到T.data中应有的位置上(不连续) 为此,需设两个附助向量num和cpot num[col]表示矩阵M中col列中非0元个数 cpot[col]指示M中col列第一个非0元在T.data中位置 cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1] tsmatrix fasttransposematrix(tsmatrix M) {T.m=M.n; T.n=M.m, T.t=M.t; if(M.t!=0) { for(col=1;col=M.n;col++) num[col]=0; for(k=1;k=M.t;k++) num[M.data[k].j]++; cpot[1]=1; for(col=2;col=M.n;col++) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p=M.t;p++) { col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; cpot[col]++; }//for }//if return T; } §5.3 广义表的定义 一、广义表(General List) 广义表中的元素即可以是单个元素(称为原子)也可以是广义表(称为子表)。 一般表示:LS = (a1, a2 , …,an ) 习惯上广义表名用大写字

文档评论(0)

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

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

1亿VIP精品文档

相关文档