#include "matrix.h"
#include <iostream>
using namespace std;
matrix::matrix(void)
{
}
matrix::~matrix(void)
{
}
//在输入时,是用行的顺序来存的 这点在输入时应注意
istream& operator>>(istream& in,matrix& a)
{
cout<<"请输入稀疏矩阵的非零项个数"<<endl;
in>>a.term;
cout<<"请输入稀疏矩阵的行数"<<endl;
in>>a.Row;
cout<<"请输入稀疏矩阵的列数"<<endl;
in>>a.Col;
a.smarray=new trituple[a.term];
for(int i=0;i<a.term;i++)
{
cout<<"第"<<i+1<<"个结点的row"<<endl;
in>>a.smarray[i].row;
cout<<"第"<<i+1<<"个结点的col"<<endl;
in>>a.smarray[i].col;
cout<<"第"<<i+1<<"个结点的data"<<endl;
in>>a.smarray[i].data;
}
return in;
}
ostream& operator<<(ostream& out,matrix& a)
{
out<<"此稀疏矩阵有"<<a.term<<"个非零项"<<" ";
out<<"有"<<a.Row<<"行"<<" ";
out<<"有"<<a.Col<<"列"<<endl<<endl;
for(int i=0;i<a.term;i++)
{
out<<'['<<a.smarray[i].row<<','<<a.smarray[i].col<<"]="<<a.smarray[i].data<<endl;
}
return out;
}
matrix::matrix(matrix &x)
{
Col=x.Col;
Row=x.Row;
term=x.term;
smarray=new trituple[term];
for(int i=0;i<term;i++)
{
smarray[i]=x.smarray[i];
}
}
matrix matrix::transpose()
{
matrix b;
b.Col=Row;
b.Row=Col;
b.term=term;
b.smarray=new trituple[term];
int m=0;
for(int i=0;i<Col;i++)
{
for(int j=0;j<term;j++)
{
if(smarray[j].col==i)
{
b.smarray[m].col=smarray[j].row;
b.smarray[m].row=smarray[j].col;
b.smarray[m].data=smarray[j].data;
m++;
}
}
}
cout<<b;
return b;
}
matrix matrix::fasttranspose()
{
matrix b;
b.Col=Row;
b.Row=Col;
b.term=term;
b.smarray=new trituple[term];
int *rowsize=new int[Col];
int *rowstart=new int[Col];
for(int i=0;i<Col;i++)
rowsize[i]=0;
for(int i=0;i<Col;i++)
rowstart[i]=0;
for(int i=0;i<term;i++)
rowsize[smarray[i].col]++;
for(int i=1;i<Col;i++)
rowstart[i]=rowstart[i-1]+rowsize[i-1];
for(int i=0;i<term;i++)
{
int k;
k=rowstart[smarray[i].col];
b.smarray[k].col=smarray[i].row;
b.smarray[k].row=smarray[i].col;
b.smarray[k].data=smarray[i].data;
rowstart[smarray[i].col]++;
}
cout<<b;
return b;
}
matrix operator+(matrix& a,matrix& b)
{
matrix c;
c.smarray=new trituple[a.term+b.term];
int m=0,n=0,k=0;
int am,an;
am=a.smarray[m].row*a.smarray[m].col+a.smarray[m].col;
an=b.smarray[m].row*b.smarray[m].col+b.smarray[m].col;
while(m<a.term||n<b.term)
{
if(am>an)
{
c.smarray[k]=b.smarray[n];
k++;n++;
}
else if(am<an)
{
c.smarray[k]=a.smarray[m];
k++;m++;
}
else
{
c.smarray[k].col=a.smarray[m].col;
c.smarray[k].row=a.smarray[m].row;
c.smarray[k].data=a.smarray[m].data+b.smarray[n].data;
k++;m++;n++;
}
}
for(;m<a.term;m++)
{
c.smarray[k]=a.smarray[m];
k++;m++;
}
for(;n<b.term;n++)
{
c.smarray[k]=b.smarray[n];
k++;n++;
}
c.term=k;
c.Col=a.Col;
c.Row=a.Row;
return c;
}
juzhen.rar_稀疏
版权申诉
74 浏览量
2022-09-14
16:23:29
上传
评论
收藏 1.38MB RAR 举报
局外狗
- 粉丝: 69
- 资源: 1万+
最新资源
- 模拟电路5V稳压电路-5V以及3-12V可调电源稳压扩流电路 电源电路测试Multisim仿真源文件.zip
- 在 IntelliJ IDEA 中如何配置 Tomcat 服务器+编程知识+技术开发
- 毕业设计项目,Python课程设计项目:基于python机器学习的天气预测及可视化,采用随机森林算法+pyecharts实现
- PIC18F452+Proteus双机通信 串口通信 键盘更改波特率源程序
- 六一儿童节快乐- vue+js代码示例.zip
- 基于python机器学习(ml)的天气预测和天气可视化+源代码+文档说明
- Python课程设计项目:基于python机器学习(ml)的天气预测和天气可视化+源代码+文档说明
- PHP算法与数据结构学习 案例代码.zip
- springboot大学生社团管理系统(源码+sql+论文报告)
- Open3D c++3D视觉库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈