第5讲 数组和广义表.ppt
《第5讲 数组和广义表.ppt》由会员分享,可在线阅读,更多相关《第5讲 数组和广义表.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构与算法分析(数据结构与算法分析(C+C+版)版)第第5 5章章 矩阵和广义表矩阵和广义表数组数组矩阵矩阵广义表广义表数据结构与算法分析(数据结构与算法分析(C+C+版)版)矩阵矩阵一般用二维数组来描述一个一般用二维数组来描述一个mn 矩阵矩阵a:ElemType amn;矩阵中的元素矩阵中的元素a(i,j)对应于二维数组的元素对应于二维数组的元素ai-1 j-1。这种形式要求使用数组的下标。这种形式要求使用数组的下标 来指定来指定每个矩阵元素。每个矩阵元素。数据结构与算法分析(数据结构与算法分析(C+C+版)版)特殊矩阵特殊矩阵 如果值相同的元素或零元素在矩阵中按一定的规律分布,这样的
2、矩阵称为特殊矩阵,可以用特殊方法进行存储和处理,以便提高空间效率和时间效率。1.方阵:是行数和列数相同的矩阵。2.对称矩阵:a是一个对称矩阵当且仅当对于所有的i 和 j,有a(i,j)=a(j,i)。数据结构与算法分析(数据结构与算法分析(C+C+版)版)a11 a12 .a1n a21 a22.a2n an1 an2 .ann .a11 a21 a22 a31 a32 an1 ann.k=0 1 2 3 4 n(n-1)/2 n(n+1)/2-1 按行序为主序:按行序为主序:按行序为主序:按行序为主序:三角矩阵共计三角矩阵共计元素个元素个数为:数为:数为:数为:n(n+1)/2n(n+1)/
3、2数据结构与算法分析(数据结构与算法分析(C+C+版)版)3.3.下三角矩阵下三角矩阵下三角矩阵下三角矩阵 a11 0 0.0 a21 a22 0.0 an1 an2 an3.ann .0Loc(aij)=Loc(a11)+(+(j-1)*L i(i-1)2a11 a21 a22 a31 a32 an1 ann.k=0 1 2 3 4 n(n-1)/2 n(n+1)/2-1 按行序为主序:按行序为主序:按行序为主序:按行序为主序:数据结构与算法分析(数据结构与算法分析(C+C+版)版)三对角矩阵三对角矩阵三对角矩阵三对角矩阵 a11 a12 0 .0 a21 a22 a23 0 0 0 0 a
4、n-1,n-2 an-1,n-1 an-1,n 0 0 an,n-1 ann.0 a32 a33 a34 0 0 Loc(aij)=Loc(a11)+2(i-1)+(j-1)L|i-j|1a11 a12 a21 a22 a23 ann-1 ann.k=0 1 2 3 4 n(n-1)/2 n(n+1)/2-1 按行序为主序:按行序为主序:按行序为主序:按行序为主序:数据结构与算法分析(数据结构与算法分析(C+C+版)版)稀疏矩阵稀疏矩阵(Sparse Matrix)数据结构与算法分析(数据结构与算法分析(C+C+版)版)稀疏矩阵是非零元素个数稀疏矩阵是非零元素个数稀疏矩阵是非零元素个数稀疏矩阵
5、是非零元素个数远远少于矩阵元素个数远远少于矩阵元素个数远远少于矩阵元素个数远远少于矩阵元素个数的矩阵。的矩阵。的矩阵。的矩阵。假设假设m行行n列的矩阵含列的矩阵含t个非个非0元素,一般称元素,一般称=t/(mn)为稀为稀疏因子,且认为疏因子,且认为0.05的矩阵为稀疏矩阵。的矩阵为稀疏矩阵。数据结构与算法分析(数据结构与算法分析(C+C+版)版)以常规方法,即以二维数组表示高阶的以常规方法,即以二维数组表示高阶的稀疏矩阵时产生的问题稀疏矩阵时产生的问题:1)零值元素占了很大空间零值元素占了很大空间;2)计算中进行了很多和零值的运算,遇除计算中进行了很多和零值的运算,遇除法,还需判别除数是否为零
6、。法,还需判别除数是否为零。数据结构与算法分析(数据结构与算法分析(C+C+版)版)1)尽可能少存或不存零值元素;尽可能少存或不存零值元素;解决问题的原则解决问题的原则2)尽可能减少没有实际意义的运算;尽可能减少没有实际意义的运算;3)操作方便。操作方便。即:即:1.能尽可能快地找到与下标值能尽可能快地找到与下标值 (i,j)对应的元素,对应的元素,2.能尽可能快地找到同一行或能尽可能快地找到同一行或 同一列的非零值元。同一列的非零值元。数据结构与算法分析(数据结构与算法分析(C+C+版)版)三元组表三元组表当稀疏矩阵的阶很高时,其中当稀疏矩阵的阶很高时,其中0 0元素会很多。元素会很多。如采
7、用一般矩阵的存储方法,将存储大量如采用一般矩阵的存储方法,将存储大量0 0元素,这样将浪费大量的存储空间。元素,这样将浪费大量的存储空间。一种直观、常用的方法是,对每个非零元一种直观、常用的方法是,对每个非零元素,用素,用三元组(行号,列号,元素值)三元组(行号,列号,元素值)来来表示,这样每个元素的信息就全部记录下表示,这样每个元素的信息就全部记录下来了。三元组声明如下:来了。三元组声明如下:数据结构与算法分析(数据结构与算法分析(C+C+版)版)已知稀疏矩阵三元组顺序表示例三元组顺序表示例三元组表示为数据结构与算法分析(数据结构与算法分析(C+C+版)版)/三元组类模板三元组类模板三元组类
8、模板三元组类模板templateclass template structstruct Triple Triple/数据成员数据成员数据成员数据成员:intint row,row,colcol;/非零元素的行下标与列下标非零元素的行下标与列下标非零元素的行下标与列下标非零元素的行下标与列下标ElemTypeElemType value;value;/非零元素的值非零元素的值非零元素的值非零元素的值;数据结构与算法分析(数据结构与算法分析(C+C+版)版)/稀疏矩阵三元组顺序表类模板稀疏矩阵三元组顺序表类模板稀疏矩阵三元组顺序表类模板稀疏矩阵三元组顺序表类模板templateclass temp
9、late class class TriSparseMatrixTriSparseMatrix protected:protected:/稀疏矩阵三元组顺序表的数据成员稀疏矩阵三元组顺序表的数据成员稀疏矩阵三元组顺序表的数据成员稀疏矩阵三元组顺序表的数据成员:TripleTriple*triElemstriElems;/存储稀疏矩阵的三元组表存储稀疏矩阵的三元组表存储稀疏矩阵的三元组表存储稀疏矩阵的三元组表intint maxSizemaxSize;/非零元素最大个数非零元素最大个数非零元素最大个数非零元素最大个数intint rows,cols,num;rows,cols,num;/稀疏矩阵
10、的行数稀疏矩阵的行数稀疏矩阵的行数稀疏矩阵的行数,列数及非零元个数列数及非零元个数列数及非零元个数列数及非零元个数数据结构与算法分析(数据结构与算法分析(C+C+版)版)public:public:/抽象数据类型方法声明抽象数据类型方法声明抽象数据类型方法声明抽象数据类型方法声明 void InitMatrix(int rs,int cs,int size);intint GetRowsGetRows();();/返回稀疏矩阵行数返回稀疏矩阵行数返回稀疏矩阵行数返回稀疏矩阵行数 intint GetColsGetCols();();/返回稀疏矩阵列数返回稀疏矩阵列数返回稀疏矩阵列数返回稀疏矩阵
11、列数 intint GetNumGetNum();();/返回稀疏矩阵非零元个数返回稀疏矩阵非零元个数返回稀疏矩阵非零元个数返回稀疏矩阵非零元个数 intint SetElem(intSetElem(int r,r,intint c,c,ElemTypeElemType v v)intint GetElem(intGetElem(int r,r,intint c,c,ElemTypeElemType&v);&v);TriSparseMatrixTriSparseMatrix&operator=(const&operator=(const TriSparseMatrixTriSparseMatr
12、ix©);©);/重载赋值运算符重载赋值运算符重载赋值运算符重载赋值运算符static void static void SimpleTranspose(constSimpleTranspose(const TriSparseMatrixTriSparseMatrix&source,&source,TriSparseMatrixTriSparseMatrix&destdest);/);/将稀疏将稀疏将稀疏将稀疏矩阵矩阵矩阵矩阵sourcesource转置成稀疏矩阵转置成稀疏矩阵转置成稀疏矩阵转置成稀疏矩阵destdest的简单算法的简单算法的简单算法的简单算法;数据结构与算法分
13、析(数据结构与算法分析(C+C+版)版)template void InitMatrix(int rs,int cs,int size)/构造一个构造一个rs行行cs列非零元素最大个数为列非零元素最大个数为size的空稀疏矩的空稀疏矩阵阵if(rs 1|cs 1)throw Error(行数或列数无效行数或列数无效!);/抛出异常抛出异常maxSize=size;/非零元素最大个数非零元素最大个数rows=rs;/行数行数cols=cs;/列数列数num=0;/非零元素个数非零元素个数triElems=new TriplemaxSize;/分配存分配存储空间储空间 数据结构与算法分析(数据结构
14、与算法分析(C+C+版)版)int SetElem(int r,int c,ElemType v)功能:功能:设置指定位置的元素值设置指定位置的元素值算法思路:算法思路:对于设置指定位置对于设置指定位置(r,c)的元素值的元素值v,首先查找在三,首先查找在三元组顺序表中是否有指定位置的三元组元组顺序表中是否有指定位置的三元组:(1)如果存在如果存在当当v0时为更新操作,即将时为更新操作,即将v赋值给原元素赋值给原元素e;否则为删除操作,即删除该三元组。否则为删除操作,即删除该三元组。(2)如果不存在指定的三元组如果不存在指定的三元组当当v0时为按序插入操作;时为按序插入操作;否则不作任何操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5讲 数组和广义表 数组 广义
限制150内