6二维数组(精品).ppt
《6二维数组(精品).ppt》由会员分享,可在线阅读,更多相关《6二维数组(精品).ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、版权所有,1997(c)Dale Carnegie&Associates,Inc.数组、矩阵与集合朱振元1数组的相关概念数组的相关概念数数组组是是n(n1)n(n1)个个具具有有相相同同数数据据类类型型的的数数据据元元素素a a0 0,a a1 1,a a2 2,a an-n-1 1构成的占用构成的占用连续连续存存储单储单元的有限序列。元的有限序列。操作操作:主要是存取数据元素。主要是存取数据元素。特点:采用特点:采用顺顺序的存序的存储结储结构,且不构,且不进进行插入、行插入、删删除等操作。除等操作。地址地址计计算:算:假假设设数数组组A A的的首首地地址址为为l l0 0 ,每每个个元元素素
2、占占k k个个存存储储单单元元,则则数数组组第第i i个元素的存个元素的存储储位置位置pos(Ai)pos(Ai)可由下式确定:可由下式确定:pos(Ai)pos(Ai)pos(A0)pos(A0)i i k kl l0 0i i k k(0=in)(0=in)特特别别地,当地,当k=1k=1时时,有:,有:pos(Ai)pos(Ai)l l0 0i;i;2数组抽象数据类型数组抽象数据类型 数数据据元元素素:数数组组的的数数据据元元素素集集合合可可表表示示为为a a0 0,a a1 1,a a2 2,a an-1n-1,其其中中每每个个数数据元素具有相同数据据元素具有相同数据类类型。型。结结构
3、构关关系系:数数组组元元素素呈呈线线性性结结构构,且且限限定定数数组组元元素素必必须须存存储储在在地地址址连连续续的内存的内存单单元中。元中。基本操作:基本操作:对对数数组组可可执执行以下的基本操作。行以下的基本操作。Initiate(A)Initiate(A)构造数构造数组组A A。Size(A)Size(A)求求长长度。函数度。函数值为给值为给定数定数组组A A中数据元素的个数。中数据元素的个数。Set(A,i,x)Set(A,i,x)存存数数组组元元素素。把把数数据据x x存存入入数数组组A A的的下下标标为为i i的的数数组组元元素素中中,其其约约束条件束条件为为0=0=i=lengt
4、h(A)-1i=length(A)-1。Get(A,i Get(A,i)取取数数组组元元素素。取取出出数数组组A A中中下下标标为为i i的的数数组组元元素素,其其约约束束条条件件为为0=0=i=length(A)-1i=length(A)-1。3数组类定义及实现数组类定义及实现 template template class Arrayclass Array private:private:T *a;T *a;intint size;size;public:public:Array(Array(int szint sz=100);=100);Array(const Array&Array(c
5、onst Array&arrarr););Array()delete a;Array()delete a;int getsizeint getsize()return size;()return size;T&operator(T&operator(intint i);i);Array&operator=(const Array&Array&operator=(const Array&arrarr););void resize(void resize(int szint sz=100);=100);void void prntprnt()()for(for(intint i=0;isize;i
6、+)i=0;isize;i+)coutcout ai;ai;coutcoutendlendl;4数组类构造函数与赋值函数数组类构造函数与赋值函数 Array(Array(int szint sz=100)=100)if(if(szsz=0)=0)coutcout数组长度无效数组长度无效endlendl;exit(0);exit(0);size=size=szsz;a=new Tsize;a=new Tsize;Array(const Array&Array(const Array&arrarr)size=arr.size;size=arr.size;a=new Tsize;a=new Tsiz
7、e;for(for(intint i=0;isize;i+)ai=arr.ai;i=0;isize;i+)ai=arr.ai;Array&operator=(const Array&Array&operator=(const Array&arrarr)delete a;delete a;size=arr.size;size=arr.size;a=new Tsize;a=new Tsize;for(for(intint i=0;isize;i+)ai=arr.ai;i=0;isize;i+)ai=arr.ai;return*this;return*this;5数组类重置函数数组类重置函数 /重新
8、分配空间重新分配空间void resize(void resize(int szint sz=100)=100)if(if(szsz=0)=0)coutcout数组长度无效数组长度无效endlendl;exit(0);exit(0);if(if(szsz=size)return;=size)return;T*T*newanewa=new T=new Tszsz;intint n=(n=(szsz=size)?=size)?szsz:size;:size;for(for(intint i=0;in;i+)i=0;in;i+)newanewai=ai;i=ai;delete a;delete a;
9、a=a=newanewa;size=size=szsz;6二维数组的初步认识二维数组的初步认识二二维维数数组组可可看看作作线线性性表表的的一一种种扩扩展展,在在逻逻辑辑上上可可看看成成由由若若干干行行、列列组组成成的的表表格格或或矩矩阵阵,例例如如以以下下的的m m行行n n列的矩阵列的矩阵:a a11 11 a a12 12 a a13 13 a a1n1n a a21 21 a a22 22 a a23 23 a a2n2n a am1 m1 a am2 m2 a am3 m3 a amnmn可表示成二维数组可表示成二维数组 intint Amn;Amn;7二维数组的初步认识二维数组的初步
10、认识将将二二维维数数组组看看作作是是线线性性表表的的扩扩展展,例例如如,如如果果将将每每一一列列看看作作为为一一个个元元素素,则则以以上上m m行行n n列列矩矩阵阵所所对对应应的的二二维维数数组组a a可看成如下线性表:可看成如下线性表:a a(1 1,2 2,n n)其中每一个数据元素其中每一个数据元素j j是一个列向量是一个列向量j j(a a1j,1j,a a2j,2j,a a3j,3j,a amjmj)类类似似地地,如如果果将将每每一一行行看看作作为为一一个个元元素素,则则a a可可看看成成如如下下线性表:线性表:a a(1 1,2 2,m m)其中每一个数据元素其中每一个数据元素i
11、 i是一个行向量是一个行向量i i(a ai1,i1,a ai2,i2,a ai3,i3,a ainin,)8二维数组的初步认识二维数组的初步认识一般地,二维数组的逻辑结构可表示为:一般地,二维数组的逻辑结构可表示为:Array_2=(D,R)Array_2=(D,R)其中,其中,D=D=a aij ij|i=c|i=c1 1,c,c1 1+1,+1,d,d1 1;j=c;j=c2 2,c,c2 2+1,+1,d,d2 2;a aijijData ObjectData ObjectR=ROW,COLR=ROW,COLROW=ROW=|c|c1 1i idd1 1;c;c2 2jdjd2 2-1
12、-1 ;a aijij,a ai i,j+1,j+1DDCOL=COL=|c|c1 1i idd1 1-1;c-1;c2 2jdjd2 2;a ai i+1,j+1,j,a aijijDD其其中中:(c c1 1,d d1 1)和和(c c2 2,d d2 2)分分别别为为数数组组下下标标i,i,j j的的一一对对界界界界偶偶偶偶(即即满足条件满足条件c c1 1i idd1 1,c c2 2jdjd2 2)。)。称称C C1 1,c,c2 2为下界为下界,通常取通常取c1=c2=1;c1=c2=1;称称d1,d2d1,d2为上界为上界,通常取通常取d1=md1=m,d2=nd2=n 9二维数
13、组的存储结构二维数组的存储结构按行排列按行排列排列方式排列方式a a11 11 a a12 12 a a1n1n a a21 21 a a22 22 a a2n2n a am1 m1 a am2 m2 a am3 m3 a amnmn地址计算地址计算pos(Ai,j)pos(Ai,j)l l0 0i i n n k kj j k k l l0 0 (i(i n nj j)k (0=in,0=jm)k (0=in,0=jm)特特别别地,地,当当k=1k=1时时,有:,有:pos(Ai,j)pos(Ai,j)l l0 0 i i n nj j10二维数组的存储结构二维数组的存储结构按列排列按列排列
14、排列方式排列方式a a1111 a a2121 a am1m1 a a1212 a a2222 a am2m2 a a1n1n a a2n2n a a3n3n a amnmn地址计算地址计算pos(Ai,j)pos(Ai,j)l l0 0j j m m k ki i k k l l0 0(j(j m mi i)k (0=in,0=jm)k (0=in,0=jm)特特别别地,地,当当k=1k=1时时,有:,有:pos(Ai,j)pos(Ai,j)l l0 0 j j m mi i 11矩阵的类定义矩阵的类定义class Matrixclass Matrix private:private:flo
15、at *item;float *item;intint m,n;m,n;public:public:Matrix()item=NULL;m=0;n=0;Matrix()item=NULL;m=0;n=0;Matrix(float a,Matrix(float a,intint row,row,int colint col););Matrix(Matrix&b);Matrix(Matrix&b);Matrix&operator=(Matrix&b);Matrix&operator=(Matrix&b);Matrix&Matrix&trantran();();Matrix&plus(Matrix&
16、b);Matrix&plus(Matrix&b);Matrix&Matrix&multmult(Matrix&b);(Matrix&b);void void prntprnt();();将将itemitem设设计计成成一一维维排排列列是是为为了了使使矩矩阵阵中中的的行行数数和和列列数数在在存存储储量量容许的情形下可以进行变化;容许的情形下可以进行变化;定定义义成成指指针针类类型型以以便便在在实实例例生生成成时按指定的长度动态分配存储时按指定的长度动态分配存储 12矩阵类的构造函数矩阵类的构造函数Matrix:Matrix(float a,Matrix:Matrix(float a,intint
17、 row,row,int colint col)intint j;j;m=row;n=m=row;n=colcol;item=new float m*n;item=new float m*n;for(j=0;jm*n;j+)itemj=aj;for(j=0;jm*n;j+)itemj=aj;Matrix:Matrix(Matrix&b)Matrix:Matrix(Matrix&b)intint j;j;m=b.m;n=b.n;m=b.m;n=b.n;item=new float m*n;item=new float m*n;for(j=0;jm*n;j+)itemj=b.itemj;for(j
18、=0;jm*n;j+)itemj=b.itemj;13矩阵转置矩阵转置Matrix&Matrix&trantran()()功能功能:返回当前矩返回当前矩阵阵的的转转置矩置矩阵阵但当前矩但当前矩阵阵没有改没有改变变。其。其处处理理过过程程为为:(1)(1)创创建建一一个个矩矩阵阵类类对对象象x x并并按按当当前前矩矩阵阵的的转转置置设设置置其其行行数数与与列列数数并并分分配配存存储储空空间间。(2)(2)将当前矩将当前矩阵阵中的元素中的元素转转置存放到矩置存放到矩阵阵x x中并返回中并返回x x。Matrix&Matrix:Matrix&Matrix:trantran()()Matrix&x=*
19、new Matrix;Matrix&x=*new Matrix;intint i,j;i,j;x.m=n;x.n=m;x.m=n;x.n=m;x.item=new float m*n;x.item=new float m*n;for(i=0;im;i+)for(i=0;im;i+)for(j=0;jn;j+)x.itemj*m+i=itemi*n+j;for(j=0;jn;j+)x.itemj*m+i=itemi*n+j;return x;return x;要要注注意意的的是是由由于于函函数数的的返返回回类类型型是是对对象象的的引引用用,所所以以不不能能返返回回局局部部对对象象或或无名无名对对
20、象,而只能是当前象,而只能是当前对对象或象或newnew创创建的建的对对象。象。14矩阵相加矩阵相加Matrix&plus(Matrix&b)Matrix&plus(Matrix&b)其功能其功能为为返回当前矩返回当前矩阵阵与与b b相加后的矩相加后的矩阵阵,其,其处处理理过过程程为为:(1)(1)若二矩若二矩阵阵的行、列数不等,的行、列数不等,则显则显示出示出错错信息;否信息;否则则(2)(2)创创建建一一个个矩矩阵阵类类的的对对象象x x并并按按当当前前矩矩阵阵设设置置其其行行数数与与列列数数;将将二二矩矩阵阵对对应应的元素相加后存入的元素相加后存入x x并返回并返回x x。Matrix&
21、Matrix:plus(Matrix&b)Matrix&Matrix:plus(Matrix&b)Matrix&x=*new Matrix;Matrix&x=*new Matrix;intint i,j;i,j;if(b.m!=m)|(b.n!=n)if(b.m!=m)|(b.n!=n)coutcout参数错参数错;exit(0);exit(0);else x.m=m;x.n=n;else x.m=m;x.n=n;x.item=new float m*n;x.item=new float m*n;for(i=0;im;i+)for(i=0;im;i+)for(j=0;jn;j+)for(j=0
22、;jn;j+)x.itemi*n+j=b.itemi*n+j+itemi*n+j;x.itemi*n+j=b.itemi*n+j+itemi*n+j;return x;return x;15矩阵相乘矩阵相乘设设两两个个行行列列数数分分别别为为m m l l和和l l n n的的矩矩阵阵A A、B B,则则乘积矩阵乘积矩阵C C中的元素中的元素CCi i,j j 满足以下等式:满足以下等式:例如:例如:16矩阵相乘矩阵相乘Matrix&mult(Matrix&b)其功能为返回当前矩阵与b相乘后的矩阵。处理过程为:(1)若当前矩阵的列数不等于矩阵b的行数,则显示出错信息,否则:(2)创建一个矩阵对
23、象x并按结果矩阵设置行数与列数,按公式求出其中的每一个元素并返回该矩阵。17矩阵相乘矩阵相乘Matrix&Matrix:Matrix&Matrix:multmult(Matrix&b)(Matrix&b)Matrix&x=*new Matrix;Matrix&x=*new Matrix;intint i,j,k;i,j,k;if(b.m!=n)if(b.m!=n)coutcout参数错参数错;exit(0);exit(0);else x.m=m;x.n=b.n;else x.m=m;x.n=b.n;x.item=new float x.m*x.n;x.item=new float x.m*x.
24、n;for(i=0;ix.m;i+)for(i=0;ix.m;i+)for(j=0;jx.n;j+)for(j=0;jx.n;j+)x.itemi*x.n+j=0;x.itemi*x.n+j=0;for(k=0;kn;k+)for(k=0;kn;k+)x.itemi*x.n+j=x.itemi*x.n+j=x.itemi*x.n+j+itemi*n+k*b.itemk*b.n+j;x.itemi*x.n+j+itemi*n+k*b.itemk*b.n+j;return x;return x;18互动环节:互动环节:MatrixMatrix类赋值操作的实现类赋值操作的实现 问题说问题说明:要明:
25、要实现实现MatrixMatrix类对类对象的象的赋值赋值操作。操作。float a=5,7,3,9,0,4,2,8,1,0,4,3;float a=5,7,3,9,0,4,2,8,1,0,4,3;Matrix jz1(a,4,3),jz2;Matrix jz1(a,4,3),jz2;可可设设置以下的代置以下的代码对码对其其进进行行赋值赋值的操作:的操作:jz2=jz1;jz2=jz1;赋赋值值函函数数Matrix&Matrix&operator=(operator=(Matrix&Matrix&b)b)的的功功能能是是将将矩矩阵阵对对象象b b的信息的信息设设置到当前置到当前对对象中去,并返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二维 数组 精品
限制150内