前两天学了稀疏矩阵的存储方法和一些操作,今天自己将其封装成一个类与大家分享一下(水平有限,如果有什么缺点,请各位大虾多多批评指正)
头文件:
struct Item //存放非零元信息的结构
{
int row,col;
float data;
};
class CMartixA
{
public:
void AddVal(int row,int col,float data); //矩阵加上一个数
void Multiply(CMartixA ma,CMartixA& result); //矩阵相乘
void Add(CMartixA ma,CMartixA& result); //矩阵相加
void Transpose(CMartixA ma); //求转置矩阵
void Clear(); //矩阵清零
void ReSetRPos(); //计算rpos(每行第一个非零元素所对应的m_val位置
void Print(float result[][Max]); //将矩阵输出到二维数组result
void SetVal(int row,int col,float data); //如果data是非零元,则插入或修改
int GetCol(); //返回列数
int GetRow(); //返回行数
int GetNum(); //返回非零元个数
void SetCol(int col); //设置列数
void SetRow(int row); //设置行数
CMartixA();//构造函数
virtual ~CMartixA();//析构函数
struct Item m_val[Max]; //存放三元组数组
int rpos[Max]; //存放每行第一个非零元在数组中的位置
protected:
int m_row,m_col,m_num; //行数,列数,非零元个数
};
cpp文件:
CMartixA::CMartixA()
{
m_num = 0;
m_col = 0;
m_row = 0;
for(int i = 0;i<Max;i++)
rpos[i] = 0;
}
CMartixA::~CMartixA()
{
}
void CMartixA::SetRow(int row)
{
m_row = row;
}
void CMartixA::SetCol(int col)
{
m_col = col;
}
int CMartixA::GetNum()
{
return m_num;
}
int CMartixA::GetRow()
{
return m_row;
}
int CMartixA::GetCol()
{
return m_col;
}
void CMartixA::SetVal(int row, int col, float data)
{
//如果data是非零元,则插入或修改
if(data !=