第三章 多维数组和广义表.ppt





《第三章 多维数组和广义表.ppt》由会员分享,可在线阅读,更多相关《第三章 多维数组和广义表.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 多维数组和广义表多维数组和广义表 数组可以看成是一种特殊的线性表,即线性表中数据元数组可以看成是一种特殊的线性表,即线性表中数据元数组可以看成是一种特殊的线性表,即线性表中数据元数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。素本身也是一个线性表。素本身也是一个线性表。素本身也是一个线性表。例如二维数组例如二维数组例如二维数组例如二维数组()()()()()()()()()3.1多维数组多维数组 数组的两种顺序存储结构数组的两种顺序存储结构数组的两种顺序存储结构数组的两种顺序存储结构l l以行序为主序(行优先顺序)以行序为主序(行优先顺序)以行序为主序(行优
2、先顺序)以行序为主序(行优先顺序)l l以列序为主序(列优先顺序)以列序为主序(列优先顺序)以列序为主序(列优先顺序)以列序为主序(列优先顺序)数组特点数组特点数组特点数组特点 数组结构固定数组结构固定数组结构固定数组结构固定 数据元素同构数据元素同构数据元素同构数据元素同构数组运算数组运算数组运算数组运算 给定一组下标,存取相应的数据元素给定一组下标,存取相应的数据元素给定一组下标,存取相应的数据元素给定一组下标,存取相应的数据元素 给定一组下标,修改数据元素的值给定一组下标,修改数据元素的值给定一组下标,修改数据元素的值给定一组下标,修改数据元素的值Loc(aij)=Loc(a11)+(i
3、-1)*n+(j-1)*d按行序为主序存放按行序为主序存放 amn .am2 am1 .a2n .a22 a21 a1n .a12 a11a11a12.a1na21a22.a2nam1am2.amn.若行列下标均从若行列下标均从0开始,则开始,则Loc(aij)=Loc(a00)+(i*n+j)*d am-1n-1 .am-11 am-10 .a1n-1 .a11 a10 a0n-1 .a01 a00按列序为主序存放按列序为主序存放 amn .a2n a1n .am2 .a22 a12 am1 .a21 a11Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*da11a12.a1
4、na21a22.a2nam1am2.amn.am-1n-1 .a1n-1 a0n-1 .am-11 .a11 a01 am-10 .a10 a00若行列下标均从若行列下标均从0开始,则开始,则Loc(aij)=Loc(a00)+(j*m+i)*d3.2 矩阵的压缩存储矩阵的压缩存储3.2.13.2.1 特殊矩阵特殊矩阵特殊矩阵特殊矩阵1.1.对称矩阵对称矩阵对称矩阵对称矩阵a00a01.a0n-1a10a11.a1n-1an-10an-11.an-1n-1.k=0 1 2 3 4 5 n(n-1)/2 n(n+1)/2-1 按行序为主序:按行序为主序:0in,0jn,(aij=aji)a00a
5、10a11a20a21a22.an-1,0.an-1,n-12.2.三角矩阵三角矩阵三角矩阵三角矩阵(下三角下三角下三角下三角)a00c c.ca10a11c.can-10an-11an-12.an-1n-1.cLoc(aij)=Loc(a00)+i(i+1)/2+j*d共占用n(n+1)/2+1个单元按行序为主序按行序为主序:k=0 1 2 3 4 5 n(n-1)/2 n(n+1)/2-1 a00a10a11a20a21a22.an-1,0.an-1,n-1c 三角矩阵三角矩阵三角矩阵三角矩阵(上三角上三角上三角上三角)a00a01a02.a0,n-1ca11a12.a1,n-1cccan
6、-1,n-1.Loc(aij)=Loc(a00)+i(2n-i+1)/2+j-i*d按行序为主序:按行序为主序:k=0 1 2 n-1 n(n+1)/2-1 n(n+1)/2共占用n(n+1)/2+1个单元前i 行上三角元素个数:n+(n-1)+.(n-i+1)=i(n+n-i+1)/2=i(2n-i+1)/2a00a01a02.a0n-1a11a12.an-1n-1c3 3对角矩阵对角矩阵对角矩阵对角矩阵a00a010.0a10a11a120000an-2,n-3an-2,n-2an-2,n-100 an-1,n-2an-1,n-10a21a22a2300按行序为主序:按行序为主序:k=0
7、1 2 3 4 5 6 7 3(n-1)-1 3(n-1)a00a01a10a11a12a21a22a23.an-1,n-2an-1,n-13.2.2 特殊矩阵的抽象数据类型特殊矩阵的抽象数据类型ADT ADT SpecialSpecialMatrixMatrix is is Data:Data:特殊矩阵线性表(特殊矩阵线性表(a a1 1,a,an n,a,an+1n+1),),MatrixMatrix为类型描述符为类型描述符 Operations:Operations:void void InitInitMatrixMatrix(MatrixMatrix&m,&m,intint type,
8、type,intint n);/n);/初始化初始化 ElemTypeElemType GetGetMatrixMatrixElemElem(MatrixMatrix m,m,intint i,i,intint j);/j);/取元素取元素 Void Void SetSetMatrixMatrixElemElem(MatrixMatrix&m,&m,intint i,i,intint j,j,ElemTypeElemType v);/v);/赋元素值赋元素值 Void Void ClearClearMatrixMatrix (MatrixMatrix&m);&m);清除特殊矩阵清除特殊矩阵en
9、d end SpecialSpecialMatrixMatrixstructstruct Matrix /Matrix /特殊矩阵线性表数据类型特殊矩阵线性表数据类型 ElemTypeElemType*data;/*data;/定义线性表向量指针定义线性表向量指针 intint type,size;/type,size;/特殊矩阵类型和规模特殊矩阵类型和规模;/;/type=1type=1对称矩阵;对称矩阵;type=2type=2下三角矩阵;下三角矩阵;type=3type=3上三角矩阵上三角矩阵3.2.3 特殊矩阵基本算法描述特殊矩阵基本算法描述 void void InitInitMat
10、rixMatrix(MatrixMatrix&m,&m,intint type,type,intint size);/size);/初始化初始化 intint row,row,colcol,value,n=,value,n=size(size+1)/2;m.type=type;m.type=type;m.size=size;m.size=size;m.data=new ElemTypen+1;m.data=new ElemTypen+1;for(for(intint i=0;i=0;i irowrowcolcolvalue;value;SetSetMatrixMatrixElemElem(m,
11、row,(m,row,colcol,value);,value);if(m.type=2)if(m.type=2)cincinvalue;/value;/输入上三角相同值输入上三角相同值 SetSetMatrixMatrixElemElem(m,1,2,value);/(m,1,2,value);/给上三角赋值给上三角赋值 if(m.type=3)/if(m.type=3)/输入下三角相同值输入下三角相同值 cincinvalue;value;SetSetMatrixMatrixElemElem(m,2,1,value);/(m,2,1,value);/给下三角赋值给下三角赋值 ElemTyp
12、eElemType GetGetMatrixMatrixElemElem(MatrixMatrix m,m,intint i,i,intint j);j);/取取特殊矩阵特殊矩阵元素元素 if(m.type=1)/if(m.type=1)/对称矩阵 if(i=j)return m.dataiif(i=j)return m.datai(i+1)/2+j;(i+1)/2+j;else return m.dataj else return m.dataj(j+1)/2+i;(j+1)/2+i;else if(m.type=2)/else if(m.type=2)/下三角矩阵 if(i=j)retur
13、n m.dataiif(i=j)return m.datai(i+1)/2+j);(i+1)/2+j);else return m.datam.size else return m.datam.size(m.size+1)/2;(m.size+1)/2;else /else /上三角矩阵 if(j=i)return m.dataiif(j=i)return m.datai(2(2 m.size-i+1)/2+j-i;m.size-i+1)/2+j-i;else return m.datam.size else return m.datam.size(m.size+1)/2;(m.size+1)
14、/2;Void Void SetSetMatrixMatrixElemElem(MatrixMatrix&m,&m,intint i,i,intint j,j,ElemTypeElemType v)v)/赋赋特殊矩阵特殊矩阵元素值元素值 if(m.type=1)/if(m.type=1)/对称矩阵 if(i=j)m.dataiif(i=j)m.datai(i+1)/2+j=v;(i+1)/2+j=v;else m.dataj else m.dataj(j+1)/2+i=v;(j+1)/2+i=v;else if(m.type=2)/else if(m.type=2)/下三角矩阵 if(i=j)
15、m.dataiif(i=j)m.datai(i+1)/2+j)=v;(i+1)/2+j)=v;else m.datam.size else m.datam.size(m.size+1)/2=v;(m.size+1)/2=v;else /else /上三角矩阵 if(j=i)m.dataiif(j=i)m.datai(2(2 m.size-i+1)/2+j-i=v;m.size-i+1)/2+j-i=v;else m.datam.size else m.datam.size(m.size+1)/2=v;(m.size+1)/2=v;Void Void ClearClearMatrixMatrix
16、 (MatrixMatrix&m)/&m)/清除特殊矩阵清除特殊矩阵 m.type=-1;m.size=0;delete m.data;稀疏矩阵的压缩存储原则:只存矩阵的行列数和每个非零元的行列下稀疏矩阵的压缩存储原则:只存矩阵的行列数和每个非零元的行列下标及其值。矩阵标及其值。矩阵MM可可由由(0 0,1 1,12),(,12),(0 0,2 2,9),(,9),(2 2,0 0,-3),(,-3),(2 2,5 5,14),(,14),(3 3,2 2,24),24),(4 4,1 1,18),18),(5 5,0 0,15),(,15),(5 5,3 3,-7),-7)和矩阵和矩阵行列数
17、行列数(6,76,7)唯一确定唯一确定。定义:若矩阵的非零元素个数远远少于它的零元素个数,且定义:若矩阵的非零元素个数远远少于它的零元素个数,且非零元素的分布没有一定规律,则该矩阵为稀疏矩阵。非零元素的分布没有一定规律,则该矩阵为稀疏矩阵。3.2.4 稀疏矩阵稀疏矩阵稀疏矩阵的压缩存储方法稀疏矩阵的压缩存储方法稀疏矩阵的压缩存储方法稀疏矩阵的压缩存储方法1.1.三元组表(顺序存储结构)三元组表(顺序存储结构)三元组表(顺序存储结构)三元组表(顺序存储结构)#define define MaxTermsMaxTerms 100/100/非零元素的最大个数非零元素的最大个数typedeftyped
18、ef intint ElemTypeElemType;structstruct Triple Triple intint row,row,colcol;/;/行号、列号行号、列号 ElemType valElemType val;/;/非零元素非零元素;structstruct SMatrixSMatrix intint m,n,t;/m,n,t;/行数、列数、非零元素个数行数、列数、非零元素个数 Triple dataMaxTerms+1;/Triple dataMaxTerms+1;/结点数组结点数组;row col val0 1 2 3 4 5 6 7行列下标非零元值 m n t dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 多维数组和广义表 第三 多维 数组 广义

限制150内