稀疏矩阵的操作(数据结构).docVIP

  • 8
  • 0
  • 约3.98千字
  • 约 6页
  • 2017-12-27 发布于河南
  • 举报
稀疏矩阵的操作(数据结构)

稀疏矩阵的操作(数据结构) 稀疏矩阵的操作 要求: 1.稀疏矩阵采用三元组表示。 2.两个相同行列数的稀疏矩阵A和B的相加矩阵C,并求出C. 3.求A矩阵的转置矩阵D,输出D. 我恰好也做此题啊!你运气真好! 下面的是C语言写的,不知是否可行? 那矩阵的名字可能不符合你的要求,你自己改一下吧,呵呵~~~~~ #includestdio.h #define MAXSIZE 100 /* 非零元个数的最大值 */ typedef struct triple { int i,j; /* 行下标,列下标 */ int e; /* 非零元素值 */ }triple; typedef struct tsmatrix { triple data[MAXSIZE+1]; /* 非零元三元组表,data[0]未用 */ int mu,nu,tu; /* 矩阵的行数、列数和非零元个数 */ /* 各列第一个非零元的位置表rpos[0]未用 */ }rlsmatrix; createsmatrix(rlsmatrix *M) { /* 创建稀疏矩阵M */ int e,i,m,n; M-data[0].i=0; /* 为以下比较顺序做准备 */ printf(请输入矩阵的行数,列数,和非零元素的个数:); scanf(%d,M-mu);scanf(%d,M-nu);scanf(%d,M-tu); for(i=1;i=M-tu;i++) { printf(请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:,i,M-mu,M-nu); scanf(%d,m);scanf(%d,n);scanf(%d,e); if(m1||mM-mu||n1||nM-nu) /*行或列超出范围 */ {printf(行或列超出范围);getch();exit();} if(mM-data[i-1].i||m==M-data[i-1].in=M-data[i-1].j) /*行或列的顺序有错*/ {printf(行或列的顺序有错);getch();exit();} M-data[i].i=m; M-data[i].j=n; M-data[i].e=e; } } /* 求矩阵的快速转置 */ void transposesmatrix(rlsmatrix M,rlsmatrix *T) { /* cpos存放每列的第一个非零元素的地址,temp中间变量 */ int i,m,*cpos,*temp,k=0; T-mu=M.nu; T-nu=M.mu; T-tu=M.tu; cpos=(int *)malloc(M.mu*sizeof(int)); if(cpos==NULL)exit(); temp=(int *)malloc(M.mu*sizeof(int)); if(temp==NULL)exit(); /* 对cpos对初始化,初值为0 */ *(cpos+1)=0; for(i=1;i=M.nu;i++) { for(m=1;m=M.tu;m++) { if(M.data[m].j==i) k++; } temp[i]=k; if(i==1k!=0) *(cpos+i)=1;/* 为cpos赋值 */ if(i1) *(cpos+i)=*(temp+i-1)+1; } free(temp); for(i=1;i=M.tu;i++)/* 进行转置 */ {T-data[*(cpos+M.data[i].j)].i=M.data[i].j; T-data[*(cpos+M.data[i].j)].j=M.data[i].i; T-data[*(cpos+M.data[i].j)].e=M.data[i].e; (*(cpos+M.data[i].j))++;} free(cpos); } multsmatrix(rlsmatrix M,rlsmatrix N,rlsmatrix *T) { int i,j,Qn=0; int *Qe; if(M.nu!=N.mu)

文档评论(0)

1亿VIP精品文档

相关文档