问题标题:
【设稀疏矩阵采用三元组顺序表存储结构,编写函数实现稀疏矩阵的转置运算B=AT(这里注意是A的T次方),已知稀疏矩阵A中的非零元三元组的排列次序是先按行下标排列,在行下标相同时按列下标】
问题描述:
设稀疏矩阵采用三元组顺序表存储结构,编写函数实现稀疏矩阵的转置运算B=AT(这里注意是A的T次方),已知稀疏矩阵A中的非零元三元组的排列次序是先按行下标排列,在行下标相同时按列下标排列,要求稀疏矩阵B中的非零元三元组的排列次序也是先按行下标排列,在行下标相同时按列下标排列.
运行后要什么输入才能得到最后结果啊?
黄勤烈回答:
#include
#include
#include
#defineOK1
#defineERROR0
#defineMAXSIZE12500
typedefintStatus;
typedefintElemType;
typedefstruct
{
inti,j;
ElemTypee;
}Triple;
typedefstruct
{
Tripledate[MAXSIZE+1];
intmu,nu,tu;
}TSMatrix;
StatusCreatSMatrix(TSMatrix*M)
//建立三元组
{
introw,col,date,k;
printf("请输入行数列数和非零元个数n");
scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
while(M->munutu>(M->mu*M->nu)||M->tu>MAXSIZE)
{
printf("输入不正确,请重新输入n");
fflush(stdin);
scanf("%d,%d,%d",&M->mu,&M->nu,&M->tu);
}
(*M).date[0].i=0;
for(k=1;kdate[k].i=row;
M->date[k].j=col;
M->date[k].e=date;
}
printf("输入非空元素组成的三元组完毕!n");
returnOK;
}
Statuscomp(inta,intb)
//比较两个数字的大小AddSmatrix函数使用
{
inti;
if(ab)
i=-1;
returni;
}
StatusAddSMatrix(TSMatrix&A,TSMatrix&B,TSMatrix*C)
//矩阵的相加
{
Triple*Ap,*Bp,*Ae,*Be,*Ch,*Ce;
if(A.mu!=B.mu||A.nu!=B.nu)
{
printf("nAandBisnotcomparedn");
returnERROR;
}
//if((*C).date)
//free((*C).date);
C->mu=A.mu;
C->nu=A.nu;
Ap=&A.date[1];
Bp=&B.date[1];
Ae=&A.date[A.tu];
Be=&B.date[B.tu];
Ch=Ce=C->date;
while(Api))
{
case1:
{
*Ce=*Ap;
Ap++;
}break;
case-1:
{
*Ce=*Bp;
Bp++;
}break;
case0:
{
switch(comp(Ap->j,Bp->j))
{
case0:
{
*Ce=*Ap;
Ce->e+=Bp->e;
if(!Ce->e)
Ce--;
Ap++;
Bp++;
}break;
case1:
{
*Ce=*Ap;
Ap++;
}break;
case-1:
{
*Ce=*Bp;
Bp++;
}
}
}break;
}
}
if(Ap>Ae)
while(BpBe)
while(Aptu=Ce-Ch;
returnOK;
}
StatusTranspose(TSMatrixM,TSMatrix&T)
//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
{
intk;
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
for(k=1;k
点击显示
数学推荐
热门数学推荐