当我们在储存稀疏矩阵时(很少有效数据,大部分为0的矩阵),如果我们用二维数组去储存的话,就会浪费很多存储空间,所以我们就用三元组类来储存。
储存思想
只储存有效数据的行和列以及数据值(做成结构体)。
在类中用一个一维数组储存这个结构体。
typedef struct
{
int col, row;
int item;
}Triple;
class TripleMatrix
{
private:
Triple data[MAX];
int mu, nu, num;
public:
TripleMatrix();
TripleMatrix(int m, int n);
~TripleMatrix();
void setItem(int row, int col, int item);
int getItem(int row, int col);
void printMatrix();
void printTriple();
friend bool matrixAdd(TripleMatrix a, TripleMatrix b, TripleMatrix& result);
friend bool matrixMulty(TripleMatrix a, TripleMatrix b, TripleMatrix& result);
};
TripleMatrix::TripleMatrix()
{
mu = 0;
nu = 0;
num = 0;
}
TripleMatrix::TripleMatrix(int m, int n)
{
mu = m;
nu = n;
num = 0;
}
TripleMatrix::~TripleMatrix()
{
}
void TripleMatrix::setItem(int row, int col, int item)
{
if (item == 0)
{
return;
}
Triple tri;
tri.row = row;
tri.col = col;
tri.item = item;
for (int i = 0; i < num; i++)
{
if (row == data[i].row && col == data[i].col)
{
data[i].item = item;
}
if (row < data[i].row || (col < data[i].col && row == data[i].row))
{
for (int j = num - 1; j >= i; j--)
{
data[j + 1] = data[j];
}
data[i] = tri;
num++;
return;
}
}
data[num] = tri;
num++;
}
int TripleMatrix::getItem(int row, int col)
{
for (int i = 0; i < num; i++)
{
if (row == data[i