您的位置:首页 > 其它

数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置

2011-10-18 00:16 686 查看
"Matrix.h"

#include<iostream>
using namespace std;

#define MAX_MATRIXSIZE 20
#define ElemType int

class Triple//三元组类
{
public:
int i,j;//行列号
ElemType e;//元素值
};

class TSMatrix//矩阵类
{
public:
TSMatrix();
Triple matrix[MAX_MATRIXSIZE];//三元组集合
int mu,nu,tu;//行数,列数,非零元个数
};

TSMatrix::TSMatrix()
{
mu=nu=tu=0;
}

class Matrix//矩阵类封装了有关矩阵的各种操作
{
public:
void GetMatrix();//得到矩阵的三元组
void TransposeSMatrix();//矩阵转置
void PrintMatrix();//打印矩阵
private:
void PrintMatrix(Triple[]);//重载函数用于打印转置矩阵
void GetCpot(int[]);//求转置矩阵时用于求得辅助数组Cpot的值
TSMatrix m;//实例化一个矩阵类的对象
};

void Matrix::GetMatrix()//得到矩阵的三元组
{
cout<<"Please Input The Size Of The Matrix(m*n)"<<endl;
cin>>m.mu>>m.nu;
cout<<"Please Input Matrix With Increasing Order Of RowNumber"<<endl
<<"rownum columnnum element"<<endl<<endl;
int i,j;
ElemType e;
while(cin>>i>>j>>e)
{
m.matrix[m.tu].i=i;
m.matrix[m.tu].j=j;
m.matrix[m.tu].e=e;
m.tu++;
}
cin.clear();
}

void Matrix::GetCpot(int Cpot[])//求转置矩阵时用于求得辅助数组Cpot的值
{
int num[MAX_MATRIXSIZE];
memset(num,0,sizeof(num));
for(int i=0;i<m.tu;i++)
num[m.matrix[i].j]++;
Cpot[1]=1;
for(int i=2;i<m.nu;i++)
Cpot[i]=Cpot[i-1]+num[i-1];
}

void Matrix::TransposeSMatrix()//矩阵转置
{
int Cpot[MAX_MATRIXSIZE];
GetCpot(Cpot);
Triple temp[MAX_MATRIXSIZE];
for(int i=0;i<m.tu;i++)
{
temp[Cpot[m.matrix[i].j]-1].i=m.matrix[i].j;
temp[Cpot[m.matrix[i].j]-1].j=m.matrix[i].i;
temp[Cpot[m.matrix[i].j]-1].e=m.matrix[i].e;
Cpot[m.matrix[i].j]++;
}
cout<<endl;
PrintMatrix(temp);
}

void Matrix::PrintMatrix()//打印矩阵
{
for(int i=0;i<m.tu;i++)
cout<<m.matrix[i].i<<" "<<m.matrix[i].j<<" "<<m.matrix[i].e<<endl;
}

void Matrix::PrintMatrix(Triple t[])//重载函数用于打印转置矩阵
{
for(int i=0;i<m.tu;i++)
cout<<t[i].i<<" "<<t[i].j<<" "<<t[i].e<<endl;
}


"main.cpp"

#include"Matrix.h"

int main()
{
Matrix m;
m.GetMatrix();
m.PrintMatrix();
m.TransposeSMatrix();
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐