《数据结构》第6章数组特殊矩阵和广义表课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《数据结构》第6章数组特殊矩阵和广义表课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数组 特殊 矩阵 广义 课件
- 资源描述:
-
1、王钢王钢 主编主编清华大学出版社清华大学出版社第6章 数组、特殊矩阵和广义表l数组的定义及其存储l特殊矩阵的压缩存储l稀疏矩阵逻辑结构和存储结构l广义表的逻辑结构和存储结构l数组和广义表的操作应用举例数组的定义及逻辑结构数组的定义及逻辑结构 数组数组是由下标和值组成的元素序列的集合。在数组中,一旦给定下标,都存在一个与其对应的值,这个值称为数组元素数组元素。在数组中通常做下面两种操作:l取值操作:给定一组下标,读其对应的数组元素。l赋值操作:给定一组下标,存储或修改与其相对应的数据元素。l例例6.1 若矩阵Amn 中存在某个元素aij满足:aij是第i行中最小值且第j 列中的最大值,则称该元素
2、为矩阵A的一个鞍点。试编写一个算法,找出A中所有的鞍点。l基本思路:在矩阵A中求出每一行的最小元素,然后判断该元素是否是它所在列中的最大值,若是则打印出,接着处理下一行。矩阵A用二维数组表示。算法如下:例题算法6.1 求矩阵鞍点算法void saddle(int A,int m,int n)/m,n是矩阵A的行和列int i,j,k,min;for(i=0;im;i+)min=Ai0;for(j=1;jn;j+)if(Aijmin)min=Aij;/找第i行最小值for(j=0;jn;j+)/检测该行中的每一个最小值是否是鞍点if(Aij=min)k=j;p=0;while(pm&Apj=m)
3、printf(%d%d%d,i,j,k);/if对称矩阵的压缩存储对称矩阵的压缩存储 1对称矩阵若一个n阶矩阵M 中满足下述性质:aij=aji 0i,jn1则称为n阶对称矩阵阶对称矩阵。例如A矩阵是一个5阶对称矩阵,如图6.5所示。2 3 5 2 93 6 6 3 85 6 2 7 32 3 7 8 49 8 3 4 1A=2对称矩阵的存储a0,0a1,0a1,1a2,0an-1,0an-1,n-1k值 n(n+1)/21 0 1 2 3第1行 第2行 第n行 图6.6 对称矩阵的压缩存储1三角矩阵8 2 3 4 5a 5 6 7 1a a 8 9 7a a a 1 0a a a a 8B=
4、8 0 0 0 02 5 0 0 03 6 8 0 04 7 9 1 05 1 7 0 8C=图6.7 上三角矩阵及下三角矩阵1带状矩阵00a0,0 a0,1 a0,2 0 0a1,0 a1,1 a1,2 a1,3 0a2,0 a2,1 a2,2 a2,3 a2,4 0 a3,1 a3,2 a3,3 a3,4 0 0 a4,2 a4,3 a4,4D=b条b条图6.8 带状矩阵 图6.9 半带宽为2的5阶带状矩阵 稀 疏 矩 阵 1 6 152 2 112 3 31 1 155 1 913 4 6ijv1A=15 300000 0 22 0 15 1100060000000091 0000000
5、0002341 4 225670图6.11 稀疏矩阵 图6.12 三元组表 三元组的类型定义:#define SMAX 1024 /最大非零元素个数typedef struct int i,j;/非零所在行、列 Elemtype v;/非零元素的值SPNode;/存储非零元素的三元组结构体类型typedef struct int mu,nu,tu;/矩阵的行、列及非零元素的实际个数SPNode dataSMAX;/三元组表SPMatrix;/稀疏矩阵的三元组表存储类型稀疏矩阵的转置 1 5 911 2 113 2 34 1 221 1 156 1 154 3 6ijv1234567B=15 0
6、 0 0 91 00 0 0 0 0 0 0 11 0 0 0 00 3 0 0 0 015 0 0 0 0 022 0 6 0 0 0 图6.13 A的转置B 图6.14 B 的三元组 算法思路:A的行、列转化成B的列、行;在A.data中依次找第一列的、第二列的、直到最后一列,并将找到的每个三元组的行、列交换后顺序存储到B.data中即可。算法6.2 稀疏矩阵的转置算法SPMatrix *TransM1(SPMatrix *A)SPMatrix*B;int p,q,col;B=(SPMatrix *)malloc(sizeof(SPMatrix);B-mu=A-nu;B-nu=A-mu;B
7、-tu=A-tu;if(B-tu0)q=1;for(col=1;colnu);col+)/按A的列序转换for(p=1;ptu);p+)/扫描整个三元组表 if(A-datap.j=col)B-dataq.i=A-datap.j;B-dataq.j=A-dataq.i;B-dataq.v=A-datap.v;q+;/if/if(b-tu0)return B;/返回转置后矩阵的指针/TransM1稀疏矩阵的乘积 稀疏矩阵的乘法运算的粗略步骤如下:(1)初始化。清理一些单元,准备按行顺序存放乘积矩阵。(2)求B的num,rpot。(3)做矩阵乘法。将A.data中三元组的列值与B.data中三元组
8、的行值相等的非零元素相乘,并将具有相同下标的乘积元素相加。算法6.3 稀疏矩阵的乘积算法 SPMatrix *MulSMatrix(SPMatrix *A,SPMatrix *B)/稀疏矩阵A(m1n1)和B(m2n2)用三元组表存储,求ABSPMatrix *C;/乘积矩阵的指针int p,q,i,j,k,r;Elemtype tempn+1;int numB-nu+1,rpotB-nu+1;if(A-nu!=B-mu)return NULL;/A的列与B的行不相等C=(SPMatrix *)malloc(sizeof(SPMatrix);/申请C的存储空间C-mu=A-mu;C-nu=A-
展开阅读全文