数据结构稀疏矩阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构第五次作业-----数组的运算
实验目的:
掌握稀疏矩阵的压缩存储方法及主要运算的实现。
实验内容与要求:
设计一个稀疏矩阵计算器,要求能够:
⑴输入并建立稀疏矩阵;
⑵输出稀疏矩阵;
⑶执行两个矩阵相加;
⑷求一个矩阵的转置矩阵。
系统:Ubuntu 13.10 x86_64
编辑器:gedit
编译:g++
时间:2014-4-17
主要代码:
#include
#include
using namespace std;
class point
{
public:
int row;
int column;
int data;
};
class matrix
{
public:
matrix() {m=n=0;}
matrix(int m,int n);
matrix(const matrix &mat);
friend ostream &operator<<(ostream &out,const matrix &mat);
matrix operator+(const matrix &mat);
void transpose();
list
private:
void push(const point &temp);
int m; //行数
int n; //列数
};
matrix::matrix(int m,int n)
{
int count,i;
point temp;
this->m=m;
this->n=n;
cout<<"请输入稀疏矩阵的数的个数";
cin>>count;
if(count>m*n)
{
cout<<"元素个数太多"< } for(i=0;i { cout<<"请输入行、列、数值:"; cin>>temp.row>>temp.column>>temp.data; push(temp); } } void matrix::push(const point &temp) { list point p; if(l.empty()) { l.push_front(temp); } else { iter=l.begin(); while(iter!=l.end()) { p=*iter; if(p.row>temp.row||(p.row==temp.row&&p.column>temp.column)) { break; } ++iter; } l.insert(iter,temp); } } matrix::matrix(const matrix &mat) { m=mat.m; n=mat.n; point temp; list list for(iter=_l.begin();iter!=_l.end();++iter) { temp=*iter; push(temp); } } ostream &operator<<(ostream &out,const matrix &mat) { int i,j,k=0; list list iter=_l.begin(); point temp=*iter; for(i=1;i<=mat.m;i++) { for(j=1;j<=mat.n;j++) { if(temp.row==i&&temp.column==j) { out< ++iter; temp=*iter; } else { out< } } out< } return out; } matrix matrix::operator+(const matrix &mat) { list list list point temp1=*iter1,temp2=*iter2; matrix result; if(m!=mat.m||n!=mat.n) { cout<<"出现错误"< } result.m=m; result.n=n; while(iter1!=l.end()&&iter2!=_l.end()) { if(temp1.row>temp2.row||(temp1.row==temp2.row&&temp1.column>temp2.column)) { result.l.push_back(temp2); ++iter2; temp2=*iter2; } else if(temp1.row==temp2.row&&temp1.column==temp2.column) { temp1.data+=temp2.data; result.l.push_back(temp1); ++iter1; ++iter2; temp1=*iter1; temp2=*iter2; } else { result.l.push_back(temp1); ++iter1; temp1=*iter1; } }