20083
数据结构作业 2003 年 第五章 数组
521假设稀疏矩阵A和B均以三元组顺序表作为存储结构:求 C=A+B。 (1)定义类型: +define MAXSIze 100 typedef struct t int i,j;//非零元行、列下标 ElemType e } Triple;//定义三元组 typedef struct Triple dataLMAXSIzE+1 int mu, nu, tu. } SMAtrix;//定义三元组表
(1) 定义类型: #define MAXSIZE 100 typedef struct { int i,j;//非零元行、列下标 ElemType e; } Triple; //定义三元组 typedef struct { Triple data[MAXSIZE+1]; int mu,nu,tu; } TSMatrix; //定义三元组表 5.21 假设稀疏矩阵A和B均以三元组顺序表作为存储结构:求 C=A+B
int ADD(TSMatrix *A, TSMatrix *B, TSMatrixNC) intm=1,n=1,k=1;/*读:m,n,写:k* if(A->mu!=B->mu A->nu!=B->nu) return error while (mtu & ntu /*比较A->data和B->data的行、列*/ /*必要时:m+,n++,k++*/ while(mtu)/米复制A中为处理完的三元组*/ while(ntu)/*复制B中为处理完的三元组米/
int ADD(TSMatrix *A, TSMatrix *B, TSMatrix *C) { int m=1,n=1,k=1; /*读:m,n, 写:k */ if (A->mu!=B->mu || A->nu!=B->nu) return ERROR; while (mtu && ntu) { /*比较A->data和B->data的行、列*/ /*必要时:m++, n++, k++ */ } while (mtu ) /*复制A中为处理完的三元组*/ while (ntu ) /*复制B中为处理完的三元组*/ }
int ADD(TSMatrix *A, TSMatrix *B, TSMatrixNC) intm=1,n=1,k=1;/*读:m,n,写:k* if(A->mu!=B->mu A->nu!=B->nu) return error while (mtu & ntu /*比较A->data和B->data的行、列*/ /*必要时:m+,n++,k++*/ while(mtu)/米复制A中为处理完的三元组*/ while(ntu)/*复制B中为处理完的三元组米/
int ADD(TSMatrix *A, TSMatrix *B, TSMatrix *C) { int m=1,n=1,k=1; /*读:m,n, 写:k */ if (A->mu!=B->mu || A->nu!=B->nu) return ERROR; while (mtu && ntu) { /*比较A->data和B->data的行、列*/ /*必要时:m++, n++, k++ */ } while (mtu ) /*复制A中为处理完的三元组*/ while (ntu ) /*复制B中为处理完的三元组*/ }
int ADD(TSMatrix *A, TSMatrix *B, TSMatrixNC) intm=1,n=1,k=1;/*读:m,n,写:k* if(A->mu!=B->mu A->nu!=B->nu) return error while (mtu & ntu int11,12; 11=A->data [m]. i* A->nu+ A->data [m]. j+1 12=B->data[n]. i* B->nu+ B->data[n]. j+1 f(11<12){/*复制A中的三元组,m++,k+米/ else if(11==12){/*相加* else{/*复制B中的三元组,n+,k++*/}
int ADD(TSMatrix *A, TSMatrix *B, TSMatrix *C) { int m=1,n=1,k=1; /*读:m,n, 写:k */ if (A->mu!=B->mu || A->nu!=B->nu) return ERROR; while (mtu && ntu) { int l1,l2; l1= A->data[m].i* A->nu+ A->data[m].j+1; l2= B->data[n].i* B->nu+ B->data[n].j+1; if (l1<l2) { /*复制A中的三元组,m++, k++*/ } else if (ll==l2) {/*相加*/} else {/*复制B中的三元组,n++, k++*/} }…..}
int add( SMAtrix*A, SMAtrix米B, SMAtrix米C intm=1,n=1,k=1;/*读:m,n,写:k* if (A->mu!=B->mu A-nu! =B->nu) return ERROR while (mtu & ntu int11,12; 11=A-data[m]. i* A->nu+ A->datalm] j+1 12=B->data[n]. i*k B->nu+ B->data[n]. j+1 if(11data[]=A->datalm m++,k++
int ADD(TSMatrix *A, TSMatrix *B, TSMatrix *C) { int m=1,n=1,k=1; /*读:m,n, 写:k */ if (A->mu!=B->mu || A->nu!=B->nu) return ERROR; while (mtu && ntu) { int l1,l2; l1= A->data[m].i* A->nu+ A->data[m].j+1; l2= B->data[n].i* B->nu+ B->data[n].j+1; if (l1data[k]=A->data[m]; m++, k++ }
else if(11=-12)( C->datalk]i=B->datain.i C->datalk] j=B->data[n]. j C->datalk] e= A->data [n] e+ B->datalnle if(C->data[k].e)k++;/*非0元素移动*/ m++,n++ e⊥se C->datalk]=B->dataIn] n++,k++
else if (ll==l2) { C->data[k].i=B->data[n].i; C->data[k].j=B->data[n].j; C->data[k].e= A->data[n].e+ B->data[n].e; if (C->data[k].e ) k++; /*非0元素移动*/ m++,n++; } else { C->data[k]=B->data[n]; n++, k++ } }
while(mtu)/*复制A中为处理完的三元组*/ C->datalk]=A->data[m] m++,k++ while(ntu)/*复制B中为处理完的三元组*/ C->data[k]=B->datain] n++,k+} C->tu=k-1: C->mu=A->mu: C->nu=A->nu return OK
while (mtu ) /*复制A中为处理完的三元组*/ { C->data[k]=A->data[m]; m++, k++} while (ntu ) /*复制B中为处理完的三元组*/ { C->data[k]=B->data[n]; n++, k++} C->tu=k-1; C->mu=A->mu; C->nu=A->nu; return OK; }