三元组实现矩阵相加.doc
文本预览下载声明
//从文本读入矩阵,将其转化为三元组矩阵,并做矩阵相加
//矩阵转置是个难点,要提高效率
以下存入trematrix1.txt中
7 8 8 1 2 5 1 4 62 6 42 7 24 2 15 6 216 7 5
以下存入trematrix2.txt中
9 8 8 2 5 9 4 1 84 2 8 5 6 47 2 9 8 5 108 7 55
?
?
源程序如下:
#includestdio.h#includestdlib.htypedef? int datatype;typedef struct{? ? datatype? data[30][3];? int size; }thrematrix;typedef? thrematrix* matrix3;typedef struct{?int data[100][100];?int row,col;//存储稀疏矩阵,行为ROW 列为COL }matrix;typedef matrix * matr;int posi=1,posj=1;void readfile(FILE *fp,matrix3 mat){//从文件读取三元组矩阵 ?int row,col;//存储稀疏矩阵的行和列 ??? int i,j;
?? ?fscanf(fp,%d%d%d,mat-data[0][0],mat-data[0][1],mat-data[0][2]); ?mat-size=mat-data[0][2];?? ?for(i=1;imat-size;i++)??? {??? fscanf(fp,%d%d%d,mat-data[i][0],mat-data[i][1],mat-data[i][2]);?}??fclose(fp);?}void prmatrix(matrix3 mat) { //打印该三元组矩阵????????????????? ?int i,j;???????????????????????????? ??? printf(\n三元组矩阵为:\n);?????? ?for(i=0;imat-data[0][2];i++)???????????????????? ?????? {????????????????????????????? ?????? for(j=0;j3;j++)?????????????? ??? printf(%4d,mat-data[i][j]);????? ????????? printf(\n);?????????????? ??? }???????????????????????????????? ????????????????????????????????????? } void transpose(matr mat,matrix3 b,matrix3 c){//基于三元组矩阵的转置 ? //将B三元组转化为C三元组 ??? int k;??? k=b-data[0][2];??? int i,j,x[k];//表示矩阵中的某一行有多少个元素 ??? int pos[k];//此B[i][]的起始位置是多少 ???? c-data[0][0]=b-data[0][1];? c-data[0][1]=b-data[0][0];? c-data[0][2]=b-data[0][2];? c-size=b-size;??? for(i=0;ik;i++)//取列 ??? {??????? pos[i]=0;?????? x[i]=0;??? }?for(i=1;ik;i++)//若列不为零则x[][]++ ??? {//保存B-data[i][1]中的 列中有多少个元素 ??? ? x[b-data[i][1]]++;?}?pos[0]=1;??? for(i=1;ik;i++)??? pos[i]=pos[i-1]+x[i-1];//计算出每个元素要插入的位置! ??for(i=1;ik;i++)?{?????????? int t;???????? t=pos[b-data[i][1]]; ?? c-data[t][0]=b-data[i][1];???? c-data[t][1]=b-data[i][0];?? c-data[t][2]=b-data[i][2];? ? ? pos[b-data[i][1]]=t+1;//计数//?? printf(|%d,pos[t]); //???????? printf(=%d| \n,pos[t]+count[t]);????
显示全部