【数据结构】(八)稀疏矩阵的加法和乘法运算(代码)

稀疏矩阵的加法和乘法运算

在这里插入图片描述
上节学了类的友元,这节开始矩阵加法和乘法运算:
(一)加法:
三元组.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
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值