/ sparse matrix.cpp : Defines the entry point for the console application.
/*-----CODE FOR FUN---------------
-------CREATED BY Dream_Whui------
-------2015-2-3-------------------*/
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAXSIZE 12500
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFEASIBLE -1
#define ElemType int
typedef struct
{
int i,j;//行,列
ElemType e;//元素值
}Triple;
typedef struct //定义稀疏矩阵的结构
{
Triple data[MAXSIZE+1];//存储非零元素(三元组)
int mu,nu,tu;//行数,列数,非零元素个数
}TSMatrix;
void CreateSMatrix(TSMatrix &M)
{
M.mu = 6;
M.nu = 7;
M.tu = 8;
int k=1;
M.data[k].i = 1;
M.data[k].j = 2;
M.data[k++].e = 12;
M.data[k].i = 1;
M.data[k].j = 3;
M.data[k++].e = 9;
M.data[k].i = 3;
M.data[k].j = 1;
M.data[k++].e = -3;
M.data[k].i = 3;
M.data[k].j = 6;
M.data[k++].e = 14;
M.data[k].i = 4;
M.data[k].j = 3;
M.data[k++].e = 24;
M.data[k].i = 5;
M.data[k].j = 2;
M.data[k++].e = 18;
M.data[k].i = 6;
M.data[k].j = 1;
M.data[k++].e = 15;
M.data[k].i = 6;
M.data[k].j = 4;
M.data[k++].e = -7;
}
int TransposeSMatrix(TSMatrix M, TSMatrix &T)//矩阵M的转置,T返回
{
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
if(T.tu)
{
int q = 1;
int col,p;
for(col=1; col<=M.nu; col++)//按T矩阵的列序为主序 查找
for(p=1; p<=M.tu; p++)
{
if(M.data[p].j == 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;
q++;
}
}
}
return OK;
}
void PrintMatrix(TSMatrix &M)//输出矩阵的非零元素
{
int k;
for(k=1; k<=M.tu; k++)
{
cout<<M.data[k].e<<" ";
}
cout<<endl;
}
int FastTransposeSMatrix(TSMatrix M, TSMatrix &T)
{
T.mu = M.nu;
T.nu = M.mu;
T.tu = M.tu;
int *num = (int*)malloc( (T.nu+1) * sizeof(int) );//矩阵M的每列元素个数
int *cpot = (int*)malloc( (T.nu+1) * sizeof(int) );//矩阵M每列的第一个元素在矩阵Tdata数组中的位置
if(T.tu)
{
int col;
for(col=1; col<=M.nu; col++)
num[col] = 0;
int t;
for(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];//初始化矩阵M每列第一个元素在矩阵T data数组中的位置
int p;
int q;
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 OK;
}
int main(int argc, char* argv[])
{
TSMatrix T;
TSMatrix M;
CreateSMatrix(M);
PrintMatrix(M);
TransposeSMatrix(M,T);
PrintMatrix(T);
FastTransposeSMatrix(M,T);
PrintMatrix(T);
return 0;
}
数据结构--稀疏矩阵(转置)
最新推荐文章于 2022-04-22 10:32:54 发布