📄 习题2-稀疏矩阵转置.c
字号:
#include "datastru.h"
#include <malloc.h>
#include <stdio.h>
SPMATRIX transpose(SPMATRIX a)
{/*稀疏矩阵(三元组存储结构)转置算法*/
int p, q, col;
SPMATRIX b;
b.m=a.n; b.n=a.m; b.t=a.t;
if(a.t!=0)
{q=1;
for(col=1;col<=a.n;col++)
for(p=1;p<=a.t;p++)
if(a.data[p].j==col)
{b.data[q].j=a.data[p].i;
b.data[q].i=a.data[p].j;
b.data[q].v=a.data[p].v;
q++;}}
return b;
}
void printmatrix(SPMATRIX c)
{/*稀疏矩阵(三元组存储结构)显示*/
int n,i;
n=c.t;
for(i=1;i<=n;i++)
printf(" [%d] 行号=%d 列号=%d 元素值=%d \n",i,c.data[i].i,c.data[i].j,c.data[i].v);
}
main()
{ SPMATRIX a;
SPMATRIX b;
int i,j,r,c,t,n;
n=1;
printf("\n\n输入矩阵行号数 : ");
scanf("%d",&r);
printf("\n\n输入矩阵列号数 : ");
scanf("%d",&c);
a.m=r; a.n=c;
printf("\n\n");
for(i=0;i<r;i++) /*输入矩阵元素值 */
for(j=0;j<c;j++)
{printf("输入元素[%d,%d]值: ",i+1,j+1);
scanf("%d",&t);
if(t!=0) {a.data[n].i=i+1; /*非零元素存入稀疏矩阵三元组存储结构中*/
a.data[n].j=j+1;
a.data[n].v=t;
n=n+1;}
}
n=n-1; a.t=n; /*a.t中为稀疏矩阵非零元素个数*/
printf("\n\n稀疏矩阵三元组表示 : \n\n");
printmatrix(a); /*稀疏矩阵(三元组存储结构)转置*/
b=transpose(a);
printf("\n\n转置后稀疏矩阵三元组表示 : \n\n");
printmatrix(b);
printf("\n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -