#include <stdio.h>
#include <malloc.h>
typedef struct{
int i,j; /*非零元素下标*/
int v; /*非零元素值*/
}tripletp;
typedef struct{
tripletp elem[100]; /*非零元素三元组表*/
int m,n,t; /*矩阵的的行数,列数,和非零元素个数*/
}spmattp;
spmattp *init()
{
spmattp *p;
p=(spmattp *)malloc(sizeof(spmattp));
p->m=0;
p->n=0;
p->t=0;
return p;
}
void transmat(spmattp *a,spmattp *b)
{
int q; /*elem[]中的序号*/
int col; //行
int p;
b->m=a->m;
b->n=a->n;
b->t=a->t;
if(a->t!=0)
{
q=0;
for(col=1;col<=a->n;col++) /*第col列等列标的元素作为结果距阵的第i行的元素*/
for(p=0;p<a->t;p++)
{/*依次在M中寻找等列的元素*/
if(a->elem[p].j==col) /*找到目标元素进行转置运算*/
{
b->elem[q].i=a->elem[p].j;
b->elem[q].j=a->elem[p].i;
b->elem[q].v=a->elem[p].v;
q++;
}
}
}
}
void main()
{
int y;
int x;
spmattp *ma, *mb;
ma=init();
mb=init();
ma->t=6;
ma->n=6;
for(x=0;x<ma->t;x++)
{
printf("请依输入非零元素的下标 i ,j ,v的值\n");
scanf("%d,%d,%d",&ma->elem[x].i,&ma->elem[x].j,&ma->elem[x].v);
// ma->n++;
ma->m++;
}
transmat(ma,mb);
int p=0;
printf("i,j,n \n");
for(y=0;y<ma->m;y++)
{
printf("%d %d %d \n",mb->elem[p].i,mb->elem[p].j,mb->elem[p].v);
p++;
}
}
大家给点意见!
[此贴子已经被作者于2007-10-29 18:32:51编辑过]