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

来源:互联网 发布:属性数据分析引论 编辑:程序博客网 时间:2024/06/15 08:48
C语言源码:
#include <stdio.h>#include <malloc.h>#define maxsize  12500typedef 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);}}



阅读全文
0 0
原创粉丝点击