稀疏矩阵的相关操作(4)

2019-03-28 08:27

}

}

}

else

(*Q).rpos[row]=0;

else

(*Q).rpos[row]=0;

第 12 页 共26页

第五章 程序编码

源程序代码:

#include #include #define OK 1 #define ERROR 0

#define MAXSIZE 100 //非零元个数的最大值 #define MAXROW 100 typedef struct triple {

int i,j; //行下标,列下标 int e; //非零元素值 }triple;

typedef struct RLSMatrix {

triple data[MAXSIZE + 1]; //非零元三元组表

int rpos[MAXROW + 1]; //各行第一个非零元的位置表 int mu,nu,tu,num; //矩阵行数、列数和非零元个数

}RLSMatrix;

Greatesmatrix(RLSMatrix &M) //创建稀疏矩阵 {

int e,i,m,n;

M.data[0].i=0; //为以下比较顺序做准备

printf(\请输入矩阵的行数,列数,和非零元素的个数:\ scanf(\ for(i=1;i<=M.tu;i++)

{

printf(\请按行序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:\

scanf(\ if(m<1||m>M.mu||n<1||n>M.nu)

{printf(\行或列超出范围\

第 13 页 共26页

M.data[i].i=m; M.data[i].j=n; M.data[i].e=e; }

void TransposeSMatrix(RLSMatrix M,RLSMatrix &T) {//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T

int q,p;

T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu) { } return ;

q=1;

for(int col=1;col<=M.nu;++col)

for(p=1;p<=M.tu;++p)

if(M.data[p].j==col) { }

T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q;

} return OK;

}//TransposeRLSMatrix

void HeRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q) {//矩阵求和函数

int row;

if((*M).mu!=(*N).mu||(*M).nu!=(*N).nu)

{printf(\不满足矩阵相加的条件!\

int k=1; triple *p,*q;

//设置两个指针,分别指向M,N的第一个非零元位置,移动指针进行比较,得出相

加后的新矩阵非零元

p=&(*M).data[1]; q=&(*N).data[1];

第 14 页 共26页

while(p<(*M).data+(*M).tu+1&&q<(*N).data+(*N).tu+1)

if((*p).i<=(*q).i)

if((*p).i<(*q).i){

(*Q).data[k].i=(*p).i; (*Q).data[k].j=(*p).j; (*Q).data[k].e=(*p).e; k++;p++; }

else

if((*p).j<=(*q).j) if((*p).j<(*q).j){

(*Q).data[k].i=(*p).i; (*Q).data[k].j=(*p).j; (*Q).data[k].e=(*p).e; k++;p++; }

else

{

(*Q).data[k].i=(*p).i; (*Q).data[k].j=(*p).j; (*Q).data[k].e=(*p).e+(*q).e; k++;p++;q++; }

else {

(*Q).data[k].i=(*q).i; (*Q).data[k].j=(*q).j; (*Q).data[k].e=(*q).e; k++;q++; }

else

{

(*Q).data[k].i=(*q).i; (*Q).data[k].j=(*q).j; (*Q).data[k].e=(*q).e;

第 15 页 共26页

k++;q++; }

if(p<=(*M).data+(*M).tu) while(p<=(*M).data+(*M).tu){

(*Q).data[k].i=(*p).i; (*Q).data[k].j=(*p).j; (*Q).data[k].e=(*p).e; k++;p++; }

if(q<=(*N).data+(*N).tu) while(q<=(*N).data+(*N).tu){

(*Q).mu=(*M).mu;(*Q).nu=(*M).nu;(*Q).tu=k-1;

(*Q).data[k].i=(*q).i; (*Q).data[k].j=(*q).j; (*Q).data[k].e=(*q).e; k++;q++; }

//计算各行第一个非零元素在存储数组中的位置 //若该行无非零元,则rpos[]值为零

for(row=1;row<=(*Q).mu;row++){

if(cpot[row]<=(*Q).tu)

if((*Q).data[cpot[row]].i==row){ for(k=1;k<=(*Q).tu;k++)

++num[(*Q).data[k].i];

int num[MAXROW + 1];int cpot[MAXROW + 1]; num[(*Q).mu+1],row,cpot[(*Q).mu+1]; cpot[1]=1;

for(k=1;k<=(*Q).mu;k++)

num[k]=0;

for(row=2;row<=(*Q).mu;row++)

cpot[row]=cpot[row-1]+num[row-1];

第 16 页 共26页


稀疏矩阵的相关操作(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:周工作总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: