稀疏矩阵三元组加法java_三元组顺序表表示的稀疏矩阵的转置和加法运算的实现...

该博客介绍了如何使用Java实现稀疏矩阵的三元组顺序表表示,包括创建稀疏矩阵、打印矩阵、矩阵加法以及矩阵转置的详细步骤。通过示例代码展示了矩阵元素的输入、非零元素的判断和处理,以及矩阵运算的逻辑。
摘要由CSDN通过智能技术生成

#include

#include

#include

#include

#include

#include

#define MAXSIZE 100

#define MAXMU 25

typedef struct

{

int i,j;

int v;

}Triple;

typedef struct

{ int rpos[MAXMU+1];

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

void creat(TSMatrix *T)

{

int row,num,k;

do

{

printf(" 请输入稀疏矩阵行数: ");

scanf("%d", &T->mu);

if (T->mu<0 || T->mu>MAXMU)

printf("\n 行数超出定义范围,请重新输入!\n");

} while (T->mu<0 || T->mu>MAXMU);

do

{

printf(" 请输入稀疏矩阵列数: ");

scanf("%d", &T->nu);

if (T->nu<0 || T->nu>MAXMU)

printf("\n 列数超出定义范围,请重新输入!\n");

} while (T->nu<0 || T->nu>MAXMU);

do

{

printf(" 请输入稀疏矩阵的非零元素个数: ");

scanf("%d", &T->tu);

if (T->tu>MAXSIZE || (T->tu>T->mu*T->nu))

printf("\n 非零元素个数超出定义范围,请重新输入!\n");

} while (T->tu>MAXSIZE || (T->tu>T->mu*T->nu));

for (k=1; k<=T->tu; k++)

{

do

{

printf(" 请输入第%d个非零元素的行数i:", k);

scanf("%d", &T->data[k].i);

if (!T->data[k].i || T->data[k].i>T->mu)

printf("\n 输入有误,请重新输入!\n");

} while ((!T->data[k].i || T->data[k].i>T->mu));

do

{

printf(" 请输入第%d个非零元素的列数j:", k);

scanf("%d", &T->data[k].j);

if (!T->data[k].j || T->data[k].j>T->nu)

printf("\n 输入有误,请重新输入!\n");

} while ((!T->data[k].j || T->data[k].j>T->nu));

do

{

printf(" 请输入第%d个非零元素的值v:", k);

scanf("%d", &T->data[k].v);

if (T->data[k].v==0)

printf("\n 输入有误,请重新输入!\n");

} while (T->data[k].v==0);

}

for(row=1,num=1;row<=T->mu;row++)

{

T->rpos[row]=num;

while(T->data[num].i==row)

num++;

}

return;

}

void print(TSMatrix A)

{

int q,n,k,a=0;

printf("\n\n稀疏矩阵为:\n");

for(n=1;n<=A.mu;n++)

{

for(k=1;k<=A.nu;k++)

{

for(q=1;q<=A.tu;q++)

if(A.data[q].i==n && A.data[q].j==k)

{

printf("\t%-3d",A.data[q].v);break;

}

if(q>A.tu)

printf("\t%-3d",a);

}

printf("\n");

}

}

void add(TSMatrix A,TSMatrix B)

{

int n,k;

if(A.mu!=B.mu || A.nu!=B.nu)

{

printf("\n 不满足矩阵相加条件!");

printf("\n 需满足两矩阵的行数、列数均对应相等方可进行加法运算!!");

}

else

{

for(n=1;n<=A.tu;n++)

for(k=1;k<=B.tu;k++)

if(A.data[n].i==B.data[k].i && A.data[n].j==B.data[k].j)

{

A.data[n].v+=B.data[k].v;

B.data[k].v=0;

}

for(k=1;k<=B.tu;k++)

if(B.data[k].v!=0)

{

A.data[A.tu+1].i=B.data[k].i;

A.data[A.tu+1].j=B.data[k].j;

A.data[A.tu+1].v=B.data[k].v;

A.tu++;

}

print(A);

}

}

char menu()

{

char n;

printf(" 1:矩阵相加 \n");

printf(" 2:矩阵转置 \n");

printf(" 3:退出 \n");

printf(" 输入序号进行操作 \n");

;n=getchar();

return n;

}

void zhuanzhi(TSMatrix A)

{

int p,q,m;

TSMatrix B;

B.mu=A.nu;

B.nu=A.mu;

B.tu=A.tu;

if(B.tu)

{

m=1;

for(p=1;p<=A.mu;p++)

for(q=1;q<=A.nu;q++)

{

B.data[m].i=A.data[m].j;

B.data[m].j=A.data[m].i;

B.data[m].v=A.data[m].v;

++m;

}

}

print(B);

}

int main()

{

TSMatrix A,B,C;

for(;;)

switch(menu())

{case ‘1‘:creat(&A);

creat(&B);

print(A);

print(B);

add(A,B);

getch();

break;

case ‘2‘:creat(&A);

print(A);

zhuanzhi(A);

getch();

break;

case ‘3‘:

exit(0);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值