- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)