2022年数据结构实验四矩阵和散列表代码实现 .pdf
《2022年数据结构实验四矩阵和散列表代码实现 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构实验四矩阵和散列表代码实现 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1、创建稀疏矩阵类,采用行主顺序把稀疏矩阵映射到一维数组中,实现稀疏矩阵的转置和两个稀疏矩阵的加法操作。#include#include using namespace std;/三元组struct Trituple int row,col;/非零元素的行号、列号int val;/非零元素的值;/稀疏矩阵类声明class SparseMatrix public:SparseMatrix(int maxt=100);/构造函数SparseMatrix();/析构函数bool TransposeTo(SparseMatrix&);/转置void add(SparseMatrix&,SparseMa
2、trix&);/加运算void map();/采用行主顺序把稀疏矩阵映射到一维数组中bool Input();/输入稀疏矩阵void Output();/输出稀疏矩阵Trituple*data;/存储非零元素三元组的数组int rows,cols,terms;/矩阵的行数、列数、非零元素个数int maxterms;/数组 data 的大小;/构造函数,分配maxt 个三元组结点的顺序空间,构造一个空的稀疏矩阵三元组表。SparseMatrix:SparseMatrix(int maxt)maxterms=maxt;data=new Trituple maxterms;terms=rows=c
3、ols=0;/析构函数,将三元组表结构销毁。SparseMatrix:SparseMatrix()if(data!=NULL)delete data;/输出稀疏矩阵ostream&operator (ostream&out,SparseMatrix&M)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -out rows=M.rows endl;out cols=M.cols endl;out terms=M.terms endl;for(int i=0;i M.terms;i+)out data M.datai.row ,M.datai.col =M.datai.val
4、 (istream&in,SparseMatrix&N)cout 输入稀疏矩阵的行数、列数以及非零元素个数 N.rows N.cols N.terms;if(N.terms N.maxterms)exit(1);cout terms=N.terms endl;for(int i=0;i N.terms;i+)cout 输入非零元素的行号、列号和元素值 i+1 N.datai.row N.datai.col N.datai.val;return in;/转置,将*this 的转置矩阵送入B bool SparseMatrix:TransposeTo(SparseMatrix&B)if(terms
5、 B.maxterms)return false;B.rows=cols;B.cols=rows;B.terms=terms;if(terms 0)int p=0;for(int j=1;j=cols;j+)for(int k=0;k terms;k+)if(datak.col=j)B.datap.row=j;B.datap.col=datak.row;B.datap.val=datak.val;p+;return true;void SparseMatrix:add(SparseMatrix&A,SparseMatrix&B)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14
6、 页 -if(A.rows!=B.rows|A.cols!=B.cols)cout矩阵不相容,不能相加!endl;else rows=A.rows;cols=A.cols;terms=0;int a,b,e,k;a=b=e=0;for(k=1;k=A.rows;k+)while(A.dataa.row=k&B.datab.row=k)/两结点属于同一行 if(A.dataa.col B.datab.col)/A 中下标 a的结点小于B中下标为b的结点的列数 datae.val=A.dataa.val;datae.row=A.dataa.row;datae.col=A.dataa.col;e+;
7、a+;else if(A.dataa.col=B.datab.col)/两结点属于同一列 int temp=A.dataa.val+B.datab.val;if(temp=0)/两结点数值相加等于0 a+;b+;else/两结点数值相加不等于0 datae.val=temp;datae.row=A.dataa.row;datae.col=A.dataa.col;e+;a+;b+;else /A 中下标 a的结点大于B中下标为 b 的结点的列数datae.val=B.datab.val;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 14 页 -datae.row=B.datab.
8、row;datae.col=B.datab.col;e+;b+;while(A.dataa.row=k)/只有 A 中剩下行数为k 的未处理结点datae.val=A.dataa.val;datae.row=A.dataa.row;datae.col=A.dataa.col;e+;a+;while(B.datab.row=k)/只有 B中剩下行数为k 的未处理结点datae.val=B.datab.val;datae.row=B.datab.row;datae.col=B.datab.col;e+;b+;terms=e;cout和矩阵为:1);size-)int indexOfMax=0;so
9、rted=true;for(int i=1;isize;i+)if(dataindexOfMax.row1);size-)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 14 页 -int indexOfMax=0;sorted=true;for(int i=1;i datai.row)if(dataindexOfMax.col=datai.col)indexOfMax=i;else sorted=false;swap(dataindexOfMax,datasize-1);for(int i=0;i terms;i+)cout datai.val ;cout n;bool Spa
10、rseMatrix:Input()cout 输入稀疏矩阵的行数、列数以及非零元素个数 rows cols terms;if(terms maxterms)cout 非零元个数太多!endl;return false;if(terms=0)return true;cout 按行序输入 terms 个非零元素的三元组 endl;for(int i=0;i terms;i+)cout 输入第 i+1 个非零元素的行号、列号和元素值 datai.row datai.col datai.val;if(datai.row rows|datai.col cols)cout 矩阵输入有误!endl;retur
11、n false;return true;/输出稀疏矩阵void SparseMatrix:Output()名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14 页 -cout rows=rows endl;cout cols=cols endl;cout terms=terms endl;for(int i=0;i terms;i+)cout data datai.row ,datai.col =datai.val endl;int main()SparseMatrix M,T,C,D;if(M.Input()cout 原始矩阵:endl;M.Output();cout 采用行主
12、顺序把稀疏矩阵映射到一维数组中并输出 endl;M.map();cout 转置矩阵:endl;if(M.TransposeTo(T)T.Output();cout输入第二个矩阵endl;if(C.Input()cout 第二矩阵:endl;C.Output();D.add(M,C);cout 采用行主顺序把稀疏矩阵映射到一维数组中并输出 endl;D.map();system(pause);return 0;2、使用散列表设计实现一个字典,假设关键字为整数且D 为 961,在字典中插入随机产生的 500 个不同的整数,实现字典的建立和搜索操作。分别使用线性开型寻址和链表散列解决溢出。#incl
13、ude#include#include#include using namespace std;template class HashTable 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 14 页 -public:HashTable(int divisor=11);HashTable()delete ht;delete empty;HashTable&Insert(const E&e);void Output(ostream&out)const;friend ostream&operator(ostream&out,const HashTable&ht)ht.Output(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构实验四矩阵和散列表代码实现 2022 数据结构 实验 矩阵 列表 代码 实现
限制150内