小问题却整了这么久,能力有待加强,要强烈区分三元组的列数与元素总数,不能将他俩写混了
#include<stdio.h>
#define MAXSIZE 1250
#define OK 1
#define ERROR 0
#define TRUE 1
#define FLASE 0
typedef int Status;
typedef int ElemType;
typedef struct{
int i, j; //该非零元的行下标和列下标
ElemType e; //非零元对应的值
}Triple;
typedef struct{
Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用
int mu, nu, tu; //矩阵的行数,列数,非零元个数
}TSMatrix;
Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) //快速转置
{ //采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu)
{
int col;
int num[100], cpot[100];
for(col=1;col<=M.nu;++col)
num[col]=0; //num数组的初始化
for(int t=1;t<=M.tu;++t)
++num[M.data[t].j]; //求M中每一列含有的非零元个数
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1]; //求cpot向量
int q;
for(int 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];
}//for
}//if
return OK;
}//FastTransposeSMatrix
Status main()
{
TSMatrix M;
TSMatrix T;
printf("请输入原矩阵:\n");
printf("行数、列数: ");
scanf("%d%d", &M.mu, &M.nu);
printf("元素总数: ");
scanf("%d",&M.tu);
printf("输入各个对应压缩值:\n");
for(int i=1;i<=M.tu;++i)
scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e);
FastTransposeSMatrix(M, T);
printf("转置后行数、列数、元素总数非别为:\n%d %d %d\n\n", T.mu, T.nu, T.tu);
printf("值为:\n");
for(int t=1;t<=T.tu;++t)
printf("%d %d %d\n", T.data[t].i, T.data[t].j, T.data[t].e);
return OK;
}//main
分享到:
相关推荐
详细讲解三元组稀疏矩阵快速转置C语言算法,一看就会
数据结构——三元组稀疏矩阵快速转置法
#######3稀疏矩阵快速转置........
稀疏矩阵相加、相乘和转置(用三元组实现)
稀疏矩阵三元组的快速转置(VC++源程序) 稀疏矩阵三元组的快速转置(VC++源程序)
一个稀疏矩阵A的转置矩阵B,输入使用三元组输入,输出原三元组,原矩阵,转置后三元组,转置后矩阵
稀疏矩阵转置: 输入稀疏矩阵中每个元素的行号、列号、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。
//稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 100 //非零元个数最大为100 typedef struct {int i,j; //非零元的行下标和列下标 ElemType e; //非零元 }Triple; typedef struct {Triple data[MAXSIZE+1]; //...
用二维三列数组表示稀疏矩阵,实现矩阵的转置和相乘
稀疏矩阵转置: 输入稀疏矩阵中每个元素的行号、列号、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。
广义表的应用--稀疏矩阵的快速转置(三元组)
实现了从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构(m、n分别表示矩阵行数和列数;i, j为非零元素行号和列号)和十字链表的转置并将转置后的三元组到另一字符文件中
本程序以三元组表存储稀疏矩阵,可进行矩阵相加及转置运算。 TSMatrix A,B,C,D; cout请输入矩阵A和B的行数 列数 "; cin>>A.m>>A.n; B.m=C.m=D.m=A.m; B.n=C.n=D.n=A.n; cout请输入A中的非零元素个数: "; ...
数据结构作业哦 实验目的 (1)熟练掌握数组的基本操作; (2)理解稀疏矩阵的定义;...(3)掌握稀疏矩阵的三元组存储结构的定义和基本操作的实现; (4)通过本章实验帮助学生加深对C语言的使用。
矩阵的压缩存储--三元组顺序表(矩阵的转置)通过这种存储方式实行转置,让其更好的学习这种存储形式。解决思路: 将矩阵行、列维数互换 将每个三元组中的i和j相互调换 重排三元组次序
数据结构,该程序是利用c语言实现稀疏矩阵的三元组转置算法
三元组表示稀疏矩阵的转置(一般算法和快速算法).doc
设计实现三元组顺序表压缩存储表示的稀疏矩阵的转置。
利用三元组表对稀疏矩阵实现加法、减法及转置运算