稀疏矩阵的加法和乘法运算
上节学了类的友元,这节开始矩阵加法和乘法运算:
(一)加法:
三元组.h文件
#pragma once
#include<iostream>
using namespace std;
#include <string>
#define Max 100
#define ERROR 0
#define OK 1
typedef struct //三元组
{
int line; //行
int row; //列
int item; //值
}Trip;
class TripMN
{
private:
Trip dat[Max];
int L, R, num; //行 ,列, 非零元个数
public:
TripMN() //自我构造
{
L = 0;
R = 0;
num = 0;
}
TripMN(int m, int n) //创建对象时完成对属性的初始化
{
L = m;
R = n;
num = 0;
}
~TripMN()
{
//空
}
int set_Item(int line, int row, int item) //根据行号列号添加一个三元组
{
//******检查******//
if (line > L || row > R) //越界
{
return ERROR;
}
if (num == Max) //已存元素个数num达到过三元组可以存储的最大位
{
return ERROR;
}
if (item == 0) //输入的数组元素值为0,则不做插入,直接返回
{
return OK;
}
//******插入*******//
int index = 0; //存储元素应该插入的位置
while (index < num)
{
//作比较时看你时先插第一行之后下一行,然后在下一行,三元组如果是按这个方式,就先查行进行插入
if (line>dat[index].line)
{
index++; //先比行,行小于三元组行时,向后继续比较
}
else if (line == dat[index].line && (row > dat[index].row))
{
index++; //当行相等,列号大的时候,向后继续比较
}
else
{
break; //找到了位置
}
}
if (line == dat[index].line && row == dat[index].row)
{
dat[index].item = item; //如果所插正好相等,就覆盖
}
for (int i = num ; i > index ; i--)
{
dat[i].line = dat[i - 1].line;
dat[i].row = dat[i - 1].row;
dat[i].item = dat[i - 1].item; //**从尾部开始移位
}
dat[index].item = item; //插入
dat[index].line = line;
dat[index].row = row;
num++; //个数加一
return OK;
}
int get_Ttem(int line, int row) //根据行号和列号获得一个三元组
{
if (line > L || row > R) //越界检查
{
return 0;
}
for (int i = 0; i < num; i++) //遍历三元组
{
//如果发现行号列号匹配三元组,返回非零元素值
if (dat[i].line == line && dat[i].row == row)
{
return dat[i].item;
}
}
return 0