预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

/*稀疏矩阵的存储和快速转置 (实验性质:验证性实验) 上机前的预习:在实验预习报告上编写好上机题的源程序及运行程序所需的典型数据,并给程序加上适当的注释。 题目:假设稀疏矩阵A采用三元组表表示,编写程序实现该矩阵的快速转置。 要求:输入一个稀疏矩阵A,由程序将其转换成三元组表存储;转置后的三元组表,由程序将其转换成矩阵形式后输出。*/ #include"stdio.h" #definemax100 typedefstruct { intx,y,zhi; }triple; typedefstruct { triplea[max+1]; intm,n,sl; }jishu; jishushuru() //输入矩阵并输出三元组 { intb[max][max],m,n,i,j,k=0; jishujs; printf("输入矩阵的行和列:"); scanf("%d%d",&m,&n); printf("输入矩阵元素:\n"); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) scanf("%d",&b[i][j]); } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) if(b[i][j]) { js.a[k].x=i; js.a[k].y=j; js.a[k++].zhi=b[i][j]; } } js.m=m; js.n=n; js.sl=k; if(!k)printf("无非零元素!\n"); else {printf("三元组如下:\n行\t列\t值\n"); for(i=0;i<k;i++) printf("%d\t%d\t%d\n",js.a[i].x,js.a[i].y,js.a[i].zhi); } returnjs; } voidzz(jishujs) //转置三元组 { inti,j; triplet; for(i=0;i<js.sl-1;i++) { for(j=0;j<js.sl-i-1;j++) if(js.a[j].x+10*js.a[j].y>js.a[j+1].x+10*js.a[j+1].y) //换值 { t=js.a[j]; js.a[j]=js.a[j+1]; js.a[j+1]=t; } } i=js.m;js.m=js.n;js.n=i; printf("\n\n转置三元组如下:\n行\t列\t值\n"); for(i=0;i<js.sl;i++) printf("%d\t%d\t%d\n",js.a[i].y,js.a[i].x,js.a[i].zhi); } voidmain() { jishujs; js=shuru(); if(js.sl){zz(js);} }