《数据结构》第6章5暮数组、特殊矩阵和广义表.ppt

《数据结构》第6章5暮数组、特殊矩阵和广义表.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》第6章5暮数组、特殊矩阵和广义表

王钢 主编 清华大学出版社 ;第6章 数组、特殊矩阵和广义表;数组的定义及逻辑结构 ;例6.1 若矩阵Am×n 中存在某个元素aij满足:aij是第i行中最小值且第j 列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中所有的鞍点。 基本思路:在矩阵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=A[i][0]; for(j=1;jn;j++) if(A[i][j]min) min=A[i][j]; //找第i行最小值 for(j=0;jn;j++) //检测该行中的每一个最小值是否是鞍点 if(A[i][j]==min) { k=j; p=0; while(pm A[p][j]=min) p++; if(p=m) printf(%d%d%d,i,j,k); }//if } };对称矩阵的压缩存储 ;2.对称矩阵的存储 ;1.三角矩阵 ;1.带状矩阵;稀 疏 矩 阵 ;三元组的类型定义: #define SMAX 1024 // 最大非零元素个数 typedef struct{ int i , j ; // 非零所在行、列 Elemtype v; // 非零元素的值 }SPNode ; // 存储非零元素的三元组结构体类型 typedef struct { int mu , nu , tu ; // 矩阵的行、列及非零元素的实际个数 SPNode data[SMAX]; // 三元组表 }SPMatrix ; // 稀疏矩阵的三元组表存储类型;稀疏矩阵的转置 ;[算法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-tu=A-tu; if(B-tu0) { q=1; for(col=1;col=(A-nu);col++) // 按A的列序转换 for(p=1;p=(A-tu);p++) // 扫描整个三元组表 if(A-data[p].j==col) { B-data[q].i==A-data[p].j; B-data[q].j=A-data[q].i; B-data[q].v=A-data[p].v; q++; }//if }//if(b-tu0) return B; // 返回转置后矩阵的指针 }// TransM1;稀疏矩阵的乘积 ;[算法6.3] 稀疏矩阵的乘积算法 SPMatrix *MulSMatrix ( SPMatrix *A , SPMatrix *B ) { // 稀疏矩阵A(m1×n1)和B(m2×n2)用三元组表存储,求A×B SPMatrix *C ; //乘积矩阵的指针 int p , q , i , j , k , r ; Elemtype temp[n+1] ; int num[B-nu+1] , rpot[B-nu+1] ; if(A-nu!=B-mu) return NULL; //A的列与B的行不相等 C= ( SPMatrix * ) malloc ( sizeof( SPMatrix ) ) ; //申请C的存储空间 C-mu=A-mu; C-nu=A-nu; if(A-tu*B-tu==0) { C-tu=0; return C; } for ( i=1 ; i=B-mu ; i++ ) num[ i ]=0 ; //求矩阵B中每一行非零元素的个数 for ( k=1; k=B-tu ; k++ ) { ;{ i=B-data[k].i ; num[ i ]++ ; } rpot[ 1 ]=1 ; //求矩阵B中每一行第一个非

文档评论(0)

ayangjiayu4 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档