- 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)