用C实现:将二维数组中存放的稀疏矩阵压缩存储于三元组表中

用C实现:将二维数组中存放的稀疏矩阵压缩存储于三元组表中,第1张

#include <stdioh>
#define maxsize 12500
#define elemtype int
typedef int status;
typedef struct
{
int i,j;
elemtype e;
}triple;
typedef struct
{
triple data[maxsize+1];
int mu,nu,tu;
}tsmatrix;
tsmatrix creatematrix()
{
tsmatrix M;
int n;
printf("输入矩阵的行数,列数,个数:\n");
scanf("%d%d%d",&Mmu,&Mnu,&Mtu);
printf("输入非零元的值(行数、列数和值):\n");
for(n=0;n<Mtu;n++)
scanf("%d%d%d",&Mdata[n]i,&Mdata[n]j,&Mdata[n]e);
return M;
}
tsmatrix transposesmtrix(tsmatrix M,tsmatrix T)
{
int q,col,p;
Tmu=Mnu; Tnu=Mmu; Ttu=Mtu;
if(Ttu)
{
q=0;
for(col=0;col<Mnu;col++)
for(p=0;p<Mtu;p++)
if(Mdata[p]j==col)
{
Tdata[q]i=Mdata[p]j;
Tdata[q]j=Mdata[p]i;
Tdata[q]e=Mdata[p]e;
++q;
}
}
return T;
}
void print(tsmatrix M)
{
int x,y,n,k;
for(x=0;x<Mmu;x++)
{
for(y=0;y<Mnu;y++)
{
k=0;
for(n=0;n<Mtu;n++)
if((Mdata[n]i==x)&&(Mdata[n]j==y))
{
printf("%3d",Mdata[n]e);
k=1;
}
if(k==0)
printf("%3d",k);
}
printf("\n");
}
}
void main()
{
tsmatrix M,T;
M=creatematrix();
printf("M矩阵为:\n");
print(M);
T=transposesmtrix(M,T);
printf("转置后的矩阵为:\n");
print(T);
}
我做的稀疏矩阵的转置,希望对你有用!

#include <stdioh>
void exchange(int matrix[4][4], int x, int y)
{
int temp = matrix[x][y];
matrix[x][y] = matrix[y][x];
matrix[y][x] = temp;
}
void main()
{
int matrix[4][4] = {
{1,2,3,4},
{5,6,7,8},
{0,0,0,0},
{0,0,0,0}
};
// 交换指定元子
exchange(matrix,1,2);
// 输出
for(int i = 0 ; i< 4 ; i++)
{
for(int j = 0 ; j< 4 ; j++)
{
printf("%d ",matrix[i][j] );
}
printf("\n");
}
// 屏幕停留
getchar();
}

列矩阵的意思是按列方向存入
比如:1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
按列存入就是
a[20] = {1,6,11,16,2,7,12,17,3,8,13,18,4,9,14,19,5,10,15,20};
输出例子:
#include
int main()
{
int i,j,k,m = 4,n = 5;//m是行数,n是列数,当然也可以自己输入
//然后用下面输出的循环方式,输入矩阵,我这里是直接初始化的一个矩阵
int a[20] = {1,6,11,16,2,7,12,17,3,8,13,18,4,9,14,19,5,10,15,20};
for (i = 0; i < m; i++)
{
for (j = 0,k = i; j < n; k=k + m,j++)
{
printf("%3d",a[k]);
}
printf("\n");
}
return 0;
}
如果看了不会写输入的循环的话,

不能在开辟一段内存tangram_guid_1356919761478

那么你一维数组放在哪里?
因为矩阵肯定是申请好的……

而且你这里的规则不是很复杂

for (i = 0, length = 0; i < n; i ++)
{
for ( j = 0; j < m ; j ++)
{
out[length ++ ] = in [j][i];
}
}

这样就可以实现了

但是我不太能理解的是,如果你的out没有申请,那么你要放在哪里?

用二维数组,如下:
#include <stdioh>
main()
{
int i, j, a[4][4];
for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
scanf ("%d", &a[i][j]);
}
}
//这样就可以将一个33 的矩阵存在2维数组中了
for ( i = 1; i < 4; i++ )
{
for ( j = 1; j < 4; j++ )
{
printf (" %-4d ", a[i][j]);
}
printf ("\n");
}
//这样就可以显示矩阵
return 0;
}

C语言中
二维数组是按行优先存储的
即 在内存中存一个二维数组时 先把数组中第一行的数组元素存完 再接着存下一行的 直到存完。
ps:定义一个二维数组 如 int a[m][n] 该数组为m行 n列的矩阵,在内存中 这样顺序存的:
a[0][0] a[0][1] a[0][n-1] a[1][0] a[1][1]
不知道是不是帮到你的忙了
望采纳

矩阵C的输出要放在循环中。。
int i,j;
int a[3][3],b[3][3],c[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);<br> b[j][i]=a[i][j];}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c[i][j]=a[i][j]+b[i][j];
printf(" %4d",c[i][j]);
}
printf("\n");
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13356986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-21
下一篇 2023-07-21

发表评论

登录后才能评论

评论列表(0条)

保存