辛辛苦苦写的代码,点个赞再走呗
里面还有注释呢
#include"iostream"
#include"algorithm"
using namespace std;
#define MAXSIZE 10
typedef struct Triple{
int i;
int j;
int Element;
Triple(int d=0,int e = 0,int f = 0){
i = d;
j = e;
Element = f;
}
}Triple;
typedef struct{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;
}TSMatrix;
void TransposeMatrix(TSMatrix M,TSMatrix &T){
T.mu = M.nu;T.nu = M.mu;T.tu = M.tu;
if(T.mu){
int p = 1;
for(int col = 1;col<=M.mu;col++){
for(int q = 1;q<=M.tu;q++)
if(M.data[q].j == col)
{
T.data[p].Element = M.data[q].Element;
T.data[p].j = M.data[q].i;
T.data[p].i = M.data[q].j;
p++;
}
}
}
}
void Output(TSMatrix &tsmatrix){
for(int i = 1;i<=tsmatrix.tu;i++){
cout<<"第"<<tsmatrix.data[i].i<<"行"<<"第"<<tsmatrix.data[i].j<<"列"<<"的元素是:"<<tsmatrix.data[i].Element<<endl;
}
}
void FastTransposeSMatrix(TSMatrix M,TSMatrix &T){
T.mu = M.nu;T.nu = M.mu;T.tu = M.tu;
int* num = new int[M.nu+1];//M.nu = 10
int* cpot = new int[M.nu+1];
if(T.tu){
//赋初值,不然的话是一个乱数
for(int col= 1;col<= M.nu;col++){
num[col] = 0;
cpot[col] = 0;
}
for(int col = 1;col<=M.tu;col++ ) ++num[M.data[col].j];
cout<<"............统计列频:既每一列有几个数据........."<<endl;
for(int col=1;col<=M.nu;col++){
cout<<col<<"列"<<num[col]<<endl;
}
cpot[1] = 1;
for(int col= 2;col<= M.nu;col++){
cpot[col] =cpot[col-1] + num[col-1];
}
cout<<"............统计每一列中第一个元素所在T中的位置........."<<endl;
for(int col=1;col<=M.nu;col++){
cout<<col<<"列"<<cpot[col]<<endl;
}
//实现说明M.列就是T.行.
//cpot 中的值表示M中每一列第一位元素在T中位置[1.....tu],
//num[i]表示M中第i列共有几个元素,然后cpot[i]就占用几个坑位
//每占用了一个位置之后,就得使该位置的值+1;等待T中相同行的数据进入
//可以保证的是一次循环就把所有的坑位填满了
for(int p =1;p<=M.tu;p++){
//把M表中的数据和cpot的那个表链接起来
int col = M.data[p].j;
int q = cpot[col];
T.data[q].Element = M.data[p].Element;T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;
//
++cpot[col];
}
}
}
int main(){
TSMatrix tsmatrix;
tsmatrix.mu = 6;
tsmatrix.nu = 7;
tsmatrix.tu = 7;
//Triple* ptr = tsmatrix.data;
//ptr++;
tsmatrix.data[1].i = 1;tsmatrix.data[1].j = 2;tsmatrix.data[1].Element =33;
tsmatrix.data[2].i = 1;tsmatrix.data[2].j = 3;tsmatrix.data[2].Element =9;
tsmatrix.data[3].i = 3;tsmatrix.data[3].j = 1;tsmatrix.data[3].Element =10;
tsmatrix.data[4].i = 3;tsmatrix.data[4].j = 6;tsmatrix.data[4].Element =36;
tsmatrix.data[5].i = 4;tsmatrix.data[5].j = 3;tsmatrix.data[5].Element =16;
tsmatrix.data[6].i = 5;tsmatrix.data[6].j = 2;tsmatrix.data[6].Element =28;
tsmatrix.data[7].i = 6;tsmatrix.data[7].j = 4;tsmatrix.data[7].Element =37;
TSMatrix T;
//一般转置
//TransposeMatrix(tsmatrix,T);
//快速转置
FastTransposeSMatrix(tsmatrix,T);
Output(tsmatrix);
cout<<"....................."<<endl;
Output(T);
system("pause");
return 0;
}