三元组类与稀疏矩阵运算

当我们在储存稀疏矩阵时(很少有效数据,大部分为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值