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

上传人:b****1 文档编号:13988465 上传时间:2022-10-16 格式:PPT 页数:44 大小:1.39MB
下载 相关 举报
数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt_第1页
第1页 / 共44页
数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt_第2页
第2页 / 共44页
数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt_第3页
第3页 / 共44页
数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt_第4页
第4页 / 共44页
数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

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

《数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法教学课件ppt作者王曙燕chapter5多维数组和广义表PPT文档格式.ppt(44页珍藏版)》请在冰豆网上搜索。

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

其本质是地址计算问题。

有两种顺序映象的方式:

以行序为主序;

以列序为主序。

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,1,a2,2,a2,3,a2,1,a1,1,a1,2,a2,2,a1,3,a2,3,5.2多维数组,9,三维数组Armn中任一元素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个存储单元。

则aj1,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,数据结构与算法,5.2多维数组,10,推广到一般情况,可得到n维数组数据元素存储位置的映象关系:

5.2多维数组,11,例如:

设有二维数组A1020,其每个元素占2个字节,第一个元素A1,1的存储地址为100,则按行优先顺序存储时元素A5,6的存储地址为?

若按列优先顺序存储时元素A5,6的存储地址为?

A5,6=100+(5-1)*20+(6-1)*2=270,按行优先,按列优先,A5,6=100+(6-1)*10+(5-1)*2=208,5.2多维数组,12,5.3矩阵的压缩存储,特殊矩阵,三角矩阵,带状矩阵,稀疏矩阵,三元组顺序表,十字链表,13,第5章数组和广义表,特殊矩阵:

三角矩阵,下三角矩阵,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.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,稀殊矩阵:

三元组顺序表,数据类型定义,#defineMAXSIZE1000typedefstructintrow,col;

ElementTypee;

Triple;

typedefstructTripledataMAXSIZE+1;

intm,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,稀殊矩阵:

三元组顺序表,的转置运算,重排三元组之间的次序有两种方法:

按照A的列序进行转置;

按照A的行序转置,但转置后的元素按B的行序直接填到向量B.data中恰当的位置。

5.3矩阵的压缩存储,22,5.3特殊矩阵的压缩存储,第5章数组和广义表,稀殊矩阵:

三元组顺序表,的转置运算,“列序”递增转置法,算法实现,voidTransposeTSMatrix(TSMatrixA,TSMatrix*B)inti,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.row;

B-dataj.e=A.datai.e;

j+;

if(jA.len)break;

23,voidTransposeTSMatrix(TSMatrixA,TSMatrix*B)inti,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,稀殊矩阵:

三元组顺序表,的转置运算,2114,22-7,1336,4328,51-5,5.3矩阵的压缩存储,26,稀殊矩阵:

三元组顺序表,的转置运算,一次定位快速转置,算法步骤:

a.扫描矩阵A的三元组表,统计出A的每一列的非零元素的个数,存放到数组numcol中(numcol存放M第col列的非零元素个数)。

b.计算转置矩阵B的每一行在三元组表中的开始位置,并存放到数组positioncol中,(positioncol存放T第col行开始位置)。

c.再次扫描矩阵A的三元组表,根据非零元素的列号col,确定它转置后的行号,查position表,按查到的位置直接将该项存入转置三元组表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,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.n),与经典算法时间复杂度相同。

5.3矩阵的压缩存储,31,稀殊矩阵:

十字链表,的存储表示,一个结点除了数据域(i,j,elem)之外,还应该用两个方向的指针(right,down),分别指向行和列。

right:

用于链接同一行中的下一个元素;

down:

用于链接同一列中的下一个元素。

整个矩阵构成了一个十字交叉的链表,因此称十字链表。

每一行和每一列的头指针,用两个一维指针数组来存放。

5.3矩阵的压缩存储,32,稀殊矩阵:

十字链表,的类型定义,typedefstructOLNodeintrow,col;

intvalue;

structOLNode*right,*down;

OLNode,*OLink;

typedefstructOLink*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,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