稀疏矩阵运算器
#include
#include
#define maxsize 100
typedef int elemtype;
typedef struct{
int i,j;//在矩阵中的位置下标
int v;//非零元素
}triple;//三元组
typedef struct{
triple data[maxsize];//三元组数组
int rnum,cnum,sum;//行数,列数,非零元素个数
}triplematrix;
void InputData(triplematrix *m) {
int count;//计数器
int n=1;
triple t;
//开始输入稀疏矩阵的行数,列数,非零元素个数
printf("请输入稀疏矩阵的行数,列数,非零元素个数,三个数据之间用,隔开\n");
scanf("%d,%d,%d",&m->rnum,&m->cnum,&m->sum);
printf("-------------------------------------------------------------------------\n");
count=0;
printf("请输入稀疏矩阵中数据,按照行序输入,顺次为:行,列,元素\n");
printf("三个数据之间用,隔开\n");
while (1)
{
printf("%d:",n++);
scanf("%d,%d,%d",&t.i,&t.j,&t.v);//获取三元组数组,要求按行序输入
if(t.i>=0&&t.irnum&&t.j>=0&&t.jcnum)
{//三元组数据合法
m->data[count]=t;
count++;
if(count==m->sum)
break;
}
else
{
printf("遇到非法输入\n");
break;
}
}
}
triplematrix TransposeMatrix(triplematrix m)
{//返回矩阵m的转置矩阵
int *count,*rpos;
triplematrix T;
int k,i,r;
count=(int *)malloc(sizeof(int)*m.cnum);//count[i]将存放矩阵m第i列非零元素个数
rpos=(int*)malloc(sizeof(int)*m.cnum);//rpos[i]将存放转置后的矩阵行非零的存储起点
if(count==NULL||rpos==NULL)
{
printf("no enough memory\n");
}
for(i=0;i记录各列非零元素的个数
k=m.data[i].j;
count[k]++;
}
rpos[0]=0;//第0行的存储起点是0
for(i=1;i
B.data[k2].j)
{//A的列大于B的列,B的元素直接插入到C的对应位置中
C.data[k].i=B.data[k2].i;
C.data[k].j=B.data[k2].j;
C.data[k].v=B.data[k2].v;
k2++;
k++;
}
}
else if(A.data[k1].iB.data[k2].i)
{//B的行小于A的行数,B的元素直接插入到C的对应位置中
C.data[k].i=B.data[k2].i;
C.data[k].j=B.data[k2].j;
C.data[k].v=B.data[k2].v;
k2++;
k++;
}
}//EndWhile
if(k1=B.sum)
{//B结束A还有元素
while(k1B.data[k2].j)
{//A的列大于B的列
C.data[k].i=B.data[k2].i;
C.data[k].j=B.data[k2].j;
C.data[k].v=0-B.data[k2].v;
k2++;
k++;
}
}
else if(A.data[k1].iB.data[k2].i)
{//B的行小于A的行数,B的元素的相反数直接插入到C的对应位置中
C.data[k].i=B.data[k2].i;
C.data[k].j=B.data[k2].j;
C.data[k].v=0-B.data[k2].v;
k2++;
k++;
}
}//EndWhile
if(k1=B.sum)
{//B结束A还有元素
while(k1表 示A,B的行;crow,ccol分别表示C的行,
列
int k,p,q;
int num[maxsize];
int ctemp[maxsize];
int pos[maxsize];
triplematrix C;//定义新矩阵C
if(A.sum*B.sum==0)
printf("A,B为空矩阵\n");
if(A.cnum!=B.rnum)
printf("不能进行计算,两个矩阵的运算不合法\n");
else
{//矩阵乘法计算合法
for(k=0;k