数据结构稀疏矩阵

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 l; //存放稀疏矩阵里面的数据

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::iterator iter;

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::iterator iter;

list _l=mat.l;

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::iterator iter;

list _l=mat.l;

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::iterator iter1=l.begin();

list _l=mat.l;

list::iterator iter2=_l.begin();

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;

}

}

相关文档
最新文档