欢迎来到天天文库
浏览记录
ID:30847088
大小:138.28 KB
页数:7页
时间:2019-01-03
《数据结构实验之稀疏矩阵的转置》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验六:稀疏矩阵的转置[实验题目]改编教材中一维数组类,增加成员函数ArraylD&operator+(ArraylD&c2);,可以做求和运算,并在主程序里输入完两个长度相同的一维数组Z后,调用这个成员函数求和。完善教材中稀疏矩阵,调试转置运算,并编写出两个重定义的流操作运算,并口行编写主程序验证输出两个三元组,稀疏矩阵转置是否成功。[概要分析]对一个稀疏矩阵,写成行三元组形式,对行三元组扫描一次即可定位,而关键是找到每列(0,1,nJ)首个非0元素的位置,在新的三元组转置,记在k数组小。分别建立
2、SeqTriple.cpp>SeqTriple.hxTsteSeqTripleMain.cppo[详细设计]1.类的结构classClassModelT:classT:class«struct»Term+col:int+row:int+value:TSeqTriple-m:int・maxSize:int・n:int・t:inttrip:Term*1305012035马璐尿电子二班+SeqTriple(int)+~SeqTriple()+Transpose(SeqTriple&):void+Trans
3、pose2(SeqTriple&):void«friend»+operator«(ostream&,SeqTriple&):ostream&+operator»(istream&、SeqTriple&):istream&2.核心代码(1)转置思路:快速转置算法使用n个指针k[i](0<=i4、+num[i-l];具体代码:templatevoidSeqTriple::Transpose(SeqTriplevT>&B)const〃将this转證赋给B〃为num和k分配空间int*num=newint[n];int*k=newint[n];B.m二n;B.n二m;B.t=t;讦(t>0)for(inti=0;ivn;i++)num[i]=0;for(i=0;i5、l]+num[i-l];for(i=0;i6、対象)规格重新申请空间,最后循环拷贝每个元素。[程序代码]1.Main.cppinclude“SeqTriple.h”#includeintmain(){SeqTripleseql(10),seq2(10);cin>>seql;seql.Transpose(seq2);cout«seq2«endl;return0;}2.SeqTriple.cpp#include"SeqTriple.h"3.SeqTriple.h#includetemplate7、sT>structTermintrow;intcol;Tvalue;};templateclassSeqTriple{public:SeqTriple(intmSize){maxSize=mSize;trip=newTerm[maxSize];t=0;}~SeqTriple(){delete[]trip;}voidTranspose(SeqTriple&B){〃转置后的位置,第0列到第0行,第1列到第1行B.m=n;B.n=m;B.t=t;intk=0;for(inti=0;ivn;8、i++){for(intj=O;j&B)int*num=newi
4、+num[i-l];具体代码:templatevoidSeqTriple::Transpose(SeqTriplevT>&B)const〃将this转證赋给B〃为num和k分配空间int*num=newint[n];int*k=newint[n];B.m二n;B.n二m;B.t=t;讦(t>0)for(inti=0;ivn;i++)num[i]=0;for(i=0;i5、l]+num[i-l];for(i=0;i6、対象)规格重新申请空间,最后循环拷贝每个元素。[程序代码]1.Main.cppinclude“SeqTriple.h”#includeintmain(){SeqTripleseql(10),seq2(10);cin>>seql;seql.Transpose(seq2);cout«seq2«endl;return0;}2.SeqTriple.cpp#include"SeqTriple.h"3.SeqTriple.h#includetemplate7、sT>structTermintrow;intcol;Tvalue;};templateclassSeqTriple{public:SeqTriple(intmSize){maxSize=mSize;trip=newTerm[maxSize];t=0;}~SeqTriple(){delete[]trip;}voidTranspose(SeqTriple&B){〃转置后的位置,第0列到第0行,第1列到第1行B.m=n;B.n=m;B.t=t;intk=0;for(inti=0;ivn;8、i++){for(intj=O;j&B)int*num=newi
5、l]+num[i-l];for(i=0;i6、対象)规格重新申请空间,最后循环拷贝每个元素。[程序代码]1.Main.cppinclude“SeqTriple.h”#includeintmain(){SeqTripleseql(10),seq2(10);cin>>seql;seql.Transpose(seq2);cout«seq2«endl;return0;}2.SeqTriple.cpp#include"SeqTriple.h"3.SeqTriple.h#includetemplate7、sT>structTermintrow;intcol;Tvalue;};templateclassSeqTriple{public:SeqTriple(intmSize){maxSize=mSize;trip=newTerm[maxSize];t=0;}~SeqTriple(){delete[]trip;}voidTranspose(SeqTriple&B){〃转置后的位置,第0列到第0行,第1列到第1行B.m=n;B.n=m;B.t=t;intk=0;for(inti=0;ivn;8、i++){for(intj=O;j&B)int*num=newi
6、対象)规格重新申请空间,最后循环拷贝每个元素。[程序代码]1.Main.cppinclude“SeqTriple.h”#includeintmain(){SeqTripleseql(10),seq2(10);cin>>seql;seql.Transpose(seq2);cout«seq2«endl;return0;}2.SeqTriple.cpp#include"SeqTriple.h"3.SeqTriple.h#includetemplate7、sT>structTermintrow;intcol;Tvalue;};templateclassSeqTriple{public:SeqTriple(intmSize){maxSize=mSize;trip=newTerm[maxSize];t=0;}~SeqTriple(){delete[]trip;}voidTranspose(SeqTriple&B){〃转置后的位置,第0列到第0行,第1列到第1行B.m=n;B.n=m;B.t=t;intk=0;for(inti=0;ivn;8、i++){for(intj=O;j&B)int*num=newi
7、sT>structTermintrow;intcol;Tvalue;};templateclassSeqTriple{public:SeqTriple(intmSize){maxSize=mSize;trip=newTerm[maxSize];t=0;}~SeqTriple(){delete[]trip;}voidTranspose(SeqTriple&B){〃转置后的位置,第0列到第0行,第1列到第1行B.m=n;B.n=m;B.t=t;intk=0;for(inti=0;ivn;
8、i++){for(intj=O;j&B)int*num=newi
此文档下载收益归作者所有