文档详情

三元组实现矩阵相加.doc

发布:2018-05-06约7.25千字共9页下载文档
文本预览下载声明
//从文本读入矩阵,将其转化为三元组矩阵,并做矩阵相加 //矩阵转置是个难点,要提高效率 以下存入trematrix1.txt中 7 8 8 1 2 5 1 4 6 2 6 4 2 7 2 4 2 1 5 6 21 6 7 5 以下存入trematrix2.txt中 9 8 8 2 5 9 4 1 8 4 2 8 5 6 4 7 2 9 8 5 10 8 7 55 ? ? 源程序如下: #includestdio.h #includestdlib.h typedef? 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]); ????
显示全部
相似文档