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

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

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");
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注