稀疏函数三元组顺序表的快速转置算法源代码及分析

C语言源码:
#include <stdio.h>
#include <malloc.h>
#define maxsize  12500
typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[maxsize+1];
int mu,nu,tu;
}TSMatrix;


int input(TSMatrix &M)
{
int i;
printf("请输入行数,列数,非零元个数:\n");
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
for(i=1;i<=M.tu;i++)
{ 
printf("输入行标,列标和非零元素的值\n");
scanf("%d %d %d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
} 
return 1;
}
int FastTransposeSMatrix(TSMatrix M,TSMatrix &T)
{
int t,p,q,n, col,num[200],cpot[200];
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
for(col=1;col<=M.nu;col++)
num[col]=0; 
for(t=1;t<=M.nu;t++)
{
for(n=1;n<=M.tu;n++)
{if(M.data[n].j==t)
num[t]++;} 
}
for(n=1;n<=M.nu;n++)
{
if(num[n]!=0)
printf("列数为%d的数有%d个\n",n,num[n]);
} 
cpot[1]=1;
for(col=2;col<=M.nu;col++)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].j;
q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}
}
return 1;
}
int output(TSMatrix L)
{
int n;
printf("行 列 数据:\n");
for(n=1;n<=L.tu;n++)
printf("%d   %d   %d\n",L.data[n].i,L.data[n].j,L.data[n].e);
return 1;
}


void main()
{

TSMatrix M,T;
input(M);
FastTransposeSMatrix(M,T);
    output(M);
    output(T);

}



Java源码:
import java.util.Scanner;

//非零元素的下标和值
class Triple {
int i;
int j;
Object e;
}


//行数列数非零元素个数
class TsMatrix {
Triple[] data;
int mu, nu, tu;
}


public class FastTransposeDemo {
TsMatrix t = new TsMatrix();
TsMatrix m = new TsMatrix();


Scanner in = new Scanner(System.in);
//输入非零元素
public void input(TsMatrix m) {
System.out.println("请输入行数,列数,非零元素个数:");
m.mu = in.nextInt();
m.nu = in.nextInt();
m.tu = in.nextInt();


System.out.println(m.mu + " " + m.nu + " " + m.tu);
m.data = new Triple[m.tu+1];
for (int i = 1; i <= m.tu; i++) {
m.data[i] = new Triple();
}


for (int i = 1; i <= m.tu; i++) {


System.out.println("输入行标,列标和非零元素的值");
m.data[i].i = in.nextInt();
m.data[i].j = in.nextInt();
m.data[i].e = in.nextLine();
// System.out.println("i" + m.data[i].i + "j" + m.data[i].j + "e"
// + m.data[i].e);
}


}


//快速转置算法
int FastTransposeSMatrix(TsMatrix M, TsMatrix T) {
int t, p, q, n, col;
int[] num = new int[200];
int[] cpot = new int[200];
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;


T.data = new Triple[T.tu+1];
for (int i = 1; i <= T.tu; i++) {
T.data[i] = new Triple();
}


if (T.tu > 0) {
for (col = 0; col < M.nu; col++)
num[col] = 0;
for (t = 0; t < M.nu; t++) {
for (n = 1; n <= M.tu; n++) {
if (M.data[n].j == t)
num[t]++;
}
}
for (n = 0; n <= M.nu; n++) {
if (num[n] != 0)
System.out.println("列数为" + n + "的数有" + num[n] + "个");
}
//计算每列元素个数
cpot[0] = 1;
for (col = 1; col <= M.nu; col++)
cpot[col] = cpot[col - 1] + num[col - 1];
//转置
for (p = 1; p <= M.tu; ++p) {
col = M.data[p].j;
System.out.println("`````````````````" + p);
//printf("``````````````````````````%d ",p);
q = cpot[col];
T.data[q].i = M.data[p].j;
T.data[q].j = M.data[p].i;
T.data[q].e = M.data[p].e;
++cpot[col];
}
}
return 1;
}
//输出结果
public void output(TsMatrix L) {
int n;
System.out.println("行 列 数据:");


for (n = 1; n <= L.tu; n++) {
System.out.println(L.data[n].i + " " + L.data[n].j + " "
+ L.data[n].e);
}
//printf("%d   %d   %d\n",L.data[n].i,L.data[n].j,L.data[n].e);
}


public static void main(String[] args) {
TsMatrix M = new TsMatrix();
TsMatrix T = new TsMatrix();
FastTransposeDemo f = new FastTransposeDemo();
f.input(M);
f.FastTransposeSMatrix(M, T);
f.output(M);
f.output(T);
}
}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值