主题:请问如何设计一个能进行稀疏矩阵基本运算的运算题。(采用三元组表示)
lazycat
[专家分:20] 发布于 2005-05-07 16:42:00
[em18][em12]
回复列表 (共5个回复)
沙发
lazycat [专家分:20] 发布于 2005-05-12 22:52:00
给点思想啊。
板凳
jay0518 [专家分:3150] 发布于 2005-05-13 19:51:00
数据结构的书上不是有完整的算法吗?
3 楼
lazycat [专家分:20] 发布于 2005-05-14 13:29:00
是呀。给点C语言的思想呀。。
4 楼
lbm717ls [专家分:170] 发布于 2006-05-21 22:25:00
/*====三元组的存储结构==========*/
#include<stdio.h>
#define maxsize 100
#define m 3
#define n 4
typedef int elemtype;
typedef struct
{
int r;
int c;
elemtype d;
}tupnode;
typedef struct
{
int rows;
int cols;
int nums;
tupnode data[maxsize];
}tsmatrix;
reatemat(tsmatrix *t,int a[m][n]) /*创建三元组存储*/
{
int i,j;
t->rows=m;
t->cols=n;
t->nums=0;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
if(a[i][j]!=0)
{
t->data[t->nums].r=i;
t->data[t->nums].c=j;
t->data[t->nums].d=a[i][j];
t->nums++;
}
}
}
void display( tsmatrix *t)
{
int i;
if(t->nums<0)return;
printf("\t%d\t%d\t%d\n",t->rows,t->cols,t->nums);
printf("======================================\n");
for(i=0;i<t->nums;i++)
printf("\t%d\t%d\t%d\n",t->data[i].r,t->data[i].c,t->data[i].d);
}
void main(void)
{
int i,j;
tsmatrix t,tb ;
int b[m][n]={{0,0,0,4},
{2,0,0,5},
{0,0,0,8}};
reatemat(&t,b) ;
display(&t);
printf("\n\n\n\n");
system("pause");
}
5 楼
flysun0311 [专家分:2040] 发布于 2006-05-21 23:04:00
求和运算:
#include<stdio.h>
#include<malloc.h>
#define MaxNum 100
typedef int datatype;
typedef struct
{
int i;
int j;
datatype data;
}A;
typedef struct
{
int m;
int n;
int total;
A item[MaxNum];
}B;
void add(B a,B b,B *c)
{
int i;
int j;
int k=0;
for(i=0,j=0;i<a.total&&j<b.total;)
{
if(a.item[i].i==b.item[j].i)
{
if(a.item[i].j==b.item[j].j)
{
c->item[k].i=a.item[i].i;
c->item[k].j=a.item[i].j;
c->item[k].data=a.item[i].data+b.item[j].data;
i++; j++; k++;
}
else if(a.item[i].j<b.item[j].j)
{
c->item[k].i=a.item[i].i;
c->item[k].j=a.item[i].j;
c->item[k].data=a.item[i].data;
i++; k++;
}
else if(a.item[i].j>b.item[j].j)
{
c->item[k].i=b.item[i].i;
c->item[k].j=b.item[i].j;
c->item[k].data=b.item[i].data;
j++; k++;
}
}
else if(a.item[i].i<b.item[j].i)
{
c->item[k].i=a.item[i].i;
c->item[k].j=a.item[i].j;
c->item[k].data=a.item[i].data;
i++; k++;
}
else if(a.item[i].j>b.item[j].j)
{
c->item[k].i=b.item[i].i;
c->item[k].j=b.item[i].j;
c->item[k].data=b.item[i].data;
j++; k++;
}
}
c->n=a.n;
c->m=a.m;
c->total=k;
}
main()
{
B a={10,10,6,{{1,1,1},{1,4,2},{5,5,30},{8,2,4},{9,3,5},{9,4,6}}};
B b={10,10,5,{{1,1,1},{3,2,3},{4,4,20},{8,2,4},{9,3,5},{9,3,5}}};
B c;
int k,m,n;
add(a,b,&c);
printf("after adding put out the result:\n");
for(k=0;k<c.total;k++)
{
printf("i=%d\tj=%d\tdata=%d\n",c.item[k].i,c.item[k].j,c.item[k].data);
}
k=0;
printf("after adding put out the matrix\n");
for(m=0;m<c.m;m++)
{
for(n=0;n<c.n;n++)
{
if(c.item[k].i==m&&c.item[k].j)
{
printf("%d\t",c.item[k].data);
k++;
}
else printf("%d\t",0);
}
printf("\n");
}
}
我来回复