ImageVerifierCode 换一换
格式:PPT , 页数:44 ,大小:1.39MB ,
资源ID:13988465      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13988465.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt

1、其本质是地址计算问题。,有两种顺序映象的方式:,以行序为主序;,以列序为主序。,5.2 多维数组,7,以行序为主序,例如:,a1,2,a1,1,a1,3,a2,1,a2,2,a2,3,a1,2,a1,1,a1,3,a2,1,a2,2,a2,3,L,二维数组Amxn中任一元素ai,j 的存储位置 LOC(i,j)=LOC(1,1)+(n(i-1)(j-1),称为基地址或基址。,L,5.2 多维数组,8,以列序为主序,例如:,L,二维数组Amxn中任一元素ai,j 的存储位置 LOC(i,j)=LOC(1,1)+(m(j-1)(i-1),称为基地址或基址。,L,a1,2,a1,1,a1,3,a2,

2、1,a2,2,a2,3,a2,1,a1,1,a1,2,a2,2,a1,3,a2,3,5.2 多维数组,9,三维数组A r mn中任一元素ai,j,k 的存储位置,LOC(i,j,k)=LOC(1,1,1)+(i-1)mn(j-1)n+(k-1)L,j1,j2,j3代替数组下标i,j,k,并且j1,j2,j3的下限分别为c1,c2,c3,上限为d1,d2,d3,每个元素占size个存储单元。则a j1,j2,j3的存储位置,LOC(j1,j2,j3)=LOC(c1,c2,c3)+(j1-c1)(d2-c2+1)(d3-c3+1)(j2-c2)(d3-c3+1)+(j3-c3)size,数 据 结

3、 构 与 算 法,5.2 多维数组,10,推广到一般情况,可得到 n 维数组数据元素存储位置的映象关系:,5.2 多维数组,11,例如:,设有二维数组A1020,其每个元素占2个字节,第一个元素A1,1的存储地址为100,则按行优先顺序存储时元素A5,6的存储地址为?若按列优先顺序存储时元素A5,6的存储地址为?,A 5,6=100+(5-1)*20+(6-1)*2=270,按行优先,按列优先,A 5,6=100+(6-1)*10+(5-1)*2=208,5.2 多维数组,12,5.3 矩阵的压缩存储,特殊矩阵,三角矩阵,带状矩阵,稀疏矩阵,三元组顺序表,十字链表,13,第 5 章 数组和广义

4、表,特殊矩阵:,三角矩阵,下三角矩阵,LOC(i,j)=LOC(1,1)+前i-1行非零元素个数第i行中aij前非零元素的个数,=LOC(1,1)+i(i-1)/2+j-1,数 据 结 构 与 算 法,5.3 矩阵的压缩存储,14,特殊矩阵:,三角矩阵,上三角矩阵,LOC(i,j)=LOC(1,1)+前i-1行非零元素个数第i行中aij前非零元素的个数,=LOC(1,1)+(i-1)(2n-i+2)/2+j-i,5.3 矩阵的压缩存储,15,第 5 章 数组和广义表,特殊矩阵:,带状矩阵,LOC(i,j)=LOC(1,1)+3(i-1)-1+j-i+1,=LOC(1,1)+2(i-1)+j-1

5、,数 据 结 构 与 算 法,5.3 矩阵的压缩存储,16,稀殊矩阵:,稀疏因子:,设在m*n的矩阵中,有t个非零元素,令,称为矩阵的稀疏因子。通常认为=0.3时为稀疏矩阵。,数 据 结 构 与 算 法,5.3 矩阵的压缩存储,17,稀殊矩阵:,三元组顺序表,三元组也是采取按行进行存储!,1,1,3,3,2,-4,3,5,5,4,1,2,5,4,6,6,1,1,6,5,7,数 据 结 构 与 算 法,5.3 矩阵的压缩存储,18,稀殊矩阵:,三元组顺序表,数据类型定义,#define MAXSIZE 1000typedef struct int row,col;ElementType e;Tr

6、iple;typedef struct Triple dataMAXSIZE+1;int m,n,len;TSMatrix;,5.3 矩阵的压缩存储,19,5.3 特殊矩阵的压缩存储,第 5 章 数组和广义表,稀殊矩阵:,三元组顺序表,的转置运算,for(row=1;row=m;+row)for(col=1;col=n;+col)destcolrow=sourcerowcol;,其时间复杂度为:O(mn),用常规的二维数组表示时的算法,数 据 结 构 与 算 法,20,稀殊矩阵:,三元组顺序表,的转置运算,不是按行序有序存储!,重新排序,5.3 矩阵的压缩存储,21,稀殊矩阵:,三元组顺序表,

7、的转置运算,重排三元组之间的次序有两种方法:,按照A的列序进行转置;,按照A的行序转置,但转置后的元素按B的行序直接填到向量B.data中恰当的位置。,5.3 矩阵的压缩存储,22,5.3 特殊矩阵的压缩存储,第 5 章 数组和广义表,稀殊矩阵:,三元组顺序表,的转置运算,“列序”递增转置法,算法实现,void TransposeTSMatrix(TSMatrix A,TSMatrix*B)int i,j,k;B-m=A.n;B-n=A.m;B-len=A.len;if(B-len0)j=1;for(k=1;kdataj.row=A.datai.col;B-dataj.col=A.datai.

8、row;B-dataj.e=A.datai.e;j+;,if(jA.len)break;,23,void TransposeTSMatrix(TSMatrix A,TSMatrix*B)int i,j,min;i=1;while(idatai.row=A.datamin.col;B-datai.col=A.datamin.row;B-datai.e=A.datamin.e;i+;A.datamin.col=A.n+1;,24,稀殊矩阵:,三元组顺序表,的转置运算,M第j列在转置后,形成转置矩阵T的第j行。设M的第j列有k个非零元素,如图所示,一次定位快速转置,5.3 矩阵的压缩存储,25,稀殊

9、矩阵:,三元组顺序表,的转置运算,2 1 14,2 2-7,1 3 36,4 3 28,5 1-5,5.3 矩阵的压缩存储,26,稀殊矩阵:,三元组顺序表,的转置运算,一次定位快速转置,算法步骤:,a.扫描矩阵A的三元组表,统计出A的每一列的 非零元素的个数,存放到数组numcol中(numcol 存放M第col列的非零元素个数)。,b.计算转置矩阵B的每一行在三元组表中的开始 位置,并存放到数组positioncol中,(positioncol 存放T第col行开始位置)。,c.再次扫描矩阵A的三元组表,根据非零元素的列号col,确定它转置后的行号,查position表,按查到的位置直接将该

10、项存入转置三元组表B中,并修改positioncol,将其指向该行下一个元素的存储位置(positioncol+)。,5.3 矩阵的压缩存储,27,稀殊矩阵:,三元组顺序表,的转置运算,一次定位快速转置,算法实现:,a.for(col=1;col=A.n;col+)numcol=0;for(t=1;t=A.len;t+)numA.datat.col+;,0,0,0,0,0,1,1,2,1,1,5.3 矩阵的压缩存储,28,稀殊矩阵:,b.position1=1;for(col=2;col+)positioncol=positioncol-1+numcol-1;,positioncol,1,2,

11、4,4,5,5.3 矩阵的压缩存储,29,稀殊矩阵:,for(p=1;pdataq.row=A.datap.col;B-dataq.col=A.datap.row;B-dataq.e=A.datap.e;positioncol+;,2,1,14,3,5,1,-5,2,2,-7,4,1,3,36,2,4,3,28,6,5,完整P100,5.3 矩阵的压缩存储,30,稀殊矩阵:,该算法的总的循环次数为:,A.n+A.len+A.n-1+A.len,=2(A.n+A.len)-1,时间复杂度为:O(A.n+A.len),即使非零元个数A.len与A.m*A.n同数量级,其时间复杂度为O(A.m*A.

12、n),与经典算法时间复杂度相同。,5.3 矩阵的压缩存储,31,稀殊矩阵:,十字链表,的存储表示,一个结点除了数据域(i,j,elem)之外,还应该用两个方向的指针(right,down),分别指向行和列。,right:用于链接同一行中的下一个元素;,down:用于链接同一列中的下一个元素。,整个矩阵构成了一个十字交叉的链表,因此称十字链表。,每一行和每一列的头指针,用两个一维指针数组来存放。,5.3 矩阵的压缩存储,32,稀殊矩阵:,十字链表,的类型定义,typedef struct OLNode int row,col;int value;struct OLNode*right,*down

13、;OLNode,*OLink;typedef struct OLink*row_head,*col_head;CrossList;,5.3 矩阵的压缩存储,33,稀殊矩阵:,十字链表,的举例,5.3 矩阵的压缩存储,34,5.4 广义表,概念:,是n=0个元素的有限序列,记作 LS=(d1,d2,dn)其中:di 或为原子项(原子,一般用小写字母表示)或为广义表(子表,一般用大写字母表示),n 为广义表的长度。,原子:是作为结构上不可分割的成分,它可以是一个数或一个结构。,表头与表尾:LS不为空时,称d1为表头(head),称其余元素组成的子表(d2,d3,,dn)为表尾(tail)。,35,

14、5.4 广义表,举例:,1)A=(),2)F=(d,(e),n=,3)D=(a,(b,c),F),4)C=(A,D,F),5)B=(a,B)=(a,(a,(a,),n=2,n=,n=,head(F)=,head(D)=,tail(D)=,head(C)=,head(B)=,tail(F)=,0,d,(e),2,(a,(bc),(F),3,A,tail(C)=,(D,F),a,tail(B)=,(B),任何一个非空广义表其表头可能是原子或广义表,而其表尾必定为广义表。,36,5.4 广义表,结构特点:,1)广义表中的数据元素有相对次序;,2)广义表的长度定义为最外层包含元素个数;,3)广义表的深度定义为所含括弧的重数;,4)广义表可以共享;,5)广义表可以是一个递归的表。递归表的深度是无

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1