牛骨文教育服务平台(让学习变的简单)
#include<stdio.h>  
#include<windows.h>  
#define m 3 //行数  
#define n 2 //列数  
#define maxsize 50  
typedef int elemtype;  
typedef struct   
{  
int r;  
int c;  
elemtype d;  
}tupnode;  
typedef struct   
{  
int rows;  
int cols;  
int nums;  
tupnode data[maxsize];  
}tsmatrix;  
  
void creatmat(tsmatrix &t,elemtype 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++;  
}  
}  
}  
int value(tsmatrix &t,elemtype x,int i,int j) //三元组元素赋值  
{  
int k=0,k1;  
if(i>=t.rows||j>=t.cols)  
return 0;  
while(k<t.nums&&i>t.data[k].r)  
k++;  
while (k<t.nums&&i==t.data[k].r&&j>t.data[k].c)  
k++;  
if(t.data[k].r==i&&t.data[k].c==j)  
t.data[k].d=x;  
else  
{  
for(k1=t.nums-1;k1>=k;k1--)  
{  
t.data[k1+1].r=t.data[k1].r;  
t.data[k1+1].c=t.data[k1].c;  
t.data[k1+1].d=t.data[k1].d;  
}  
t.data[k].r=i;  
t.data[k].c=j;  
t.data[k].d=x;  
t.nums++;  
}  
return 1;  
}  
  
int assign(tsmatrix t,elemtype &x,int i,int j) //将指定位置的元素值赋给变量  
{  
int k=0;  
if(i>=t.rows||j>=t.cols)  
return 0;  
while (k<t.nums&&i>t.data[k].r)  
k++;  
while (k<t.nums&&i==t.data[k].r&&j>t.data[k].c)  
k++;  
if(t.data[k].r==i&&t.data[k].c==j)  
x=t.data[k].d;  
else  
x=0;  
return 1;  
}  
  
  
  
void dispmat(tsmatrix t) //输出三元组  
{  
int i;  
if(t.nums<=0)  
return;  
printf("	%d	%d	%d
",t.rows,t.cols,t.nums);  
printf("	------------------
");  
for(i=0;i<t.nums;i++)  
printf("	%d	%d	%d
",t.data[i].r,t.data[i].c,t.data[i].d);  
}  
  
void trantat(tsmatrix t,tsmatrix &tb) //矩阵转置  
{  
int p,q=0,v;  
tb.rows=t.cols;  
tb.cols=t.rows;  
tb.nums=t.nums;  
if(t.nums!=0)  
{  
for(v=0;v<t.cols;v++)  
for(p=0;p<t.nums;p++)  
if(t.data[p].c==v)  
{  
tb.data[q].r=t.data[p].c;  
tb.data[p].c=t.data[p].r;  
tb.data[q].d=t.data[p].d;  
q++;  
}  
}  
printf("转置后的三元组为:
");  
dispmat(tb);  
}  
void main()  
{  
tsmatrix t,tb;  
elemtype a[3][2],x;  
int i,j,w,g,h;  
printf(" *************欢迎使用稀疏矩阵基本运算系统****************
");  
printf("请输入%d个数
",m*n);  
for(i=0;i<m;i++)  
for(j=0;j<n;j++)  
scanf("%d",&a[i][j]);  
creatmat(t,a);  
while(1)  
{  
printf("请选择:");  
printf("1 三元组元素赋值
");  
printf(" 2 将指定位置的元素值赋给变量
");  
printf(" 3 矩阵转置
");  
printf(" 4 输出三元组
");  
printf(" 5 退出
");  
scanf("%d",&w);  
switch(w)  
{  
case 1:printf("请输入所赋值:");  
scanf("%d",&x);  
printf("
请输入插入第几行:");  
scanf("%d",&g);  
printf("
请输入插入第几列:");  
scanf("%d",&h);  
if(value(t,x,g,h))  
printf("赋值成功
");  
else  
printf("赋值失败
");  
break;  
case 2:printf("
请需取元素所在行:");  
scanf("%d",&g);  
printf("
请输入需取元素所在列:");  
scanf("%d",&h);  
if(assign(t,x,g,h))  
printf("取值成功,元素为:%d
",x);  
else  
printf("取值失败
");  
break;  
case 3:trantat(t,tb);break;  
case 4:dispmat(t);break;  
case 5:exit(0);  
default:printf("输入错误!
");  
}  
}  
}