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

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

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

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

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

1,5.2多维数组,5.3矩阵的压缩存储,5.4广义表,5.5实例分析与实现,5.1应用实例,2,应用实例:

魔方阵魔方阵是一个古老的智力问题,它要求在一个NN的方阵中填入1N2的数字(N要求为奇数),使得每一行、每一列、每条对角线的累加和都相等。

3,5.2多维数组,定义,也可以看成是m个行向量,可看成是一种特殊的线性表,其特殊在于表中的数据元素本身也是一个线性表。

数组是一组有固定个数的元素的集合。

4,抽象数据类型定义,ADTArrayADTArray,数据对象:

D=aj1j2jn|n0,称为数组的维数,ji是数组的第i维下标,1jibi,bi为数组第i维的长度,aj1j2jnElementSet,数据关系:

R=R1,R2,RnRi=|1jkbk,1kn,且ki,1jibi-1,aj1jijn,aj1ji+1jnD,i=1,n,基本操作:

1.InitArray(A,n,bond1,bondn)2.Destroy(A)3.GetValue(A,e,index1,indexn)4.SetValue(A,e,index1,indexn),5.2多维数组,5,类型特点:

1)不考虑插入和删除操作;,2)数组是多维的结构,而存储空间是一个一维的结构。

5.2多维数组,6,运算,获得特定位置的元素值;,修改特定位置的元素值。

主要操作是数据元素的定位,即给定元素的下标,得到该元素在计算机中的存放位置。

其本质是地址计算问题。

有两种顺序映象的方式:

以行序为主序;,以列序为主序。

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;B-m=A.n;B-n=A.m;B-len=A.len;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=A.n;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;intm,n,len;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