数据结构稀疏矩阵运算器课程设计报告书.docx
- 文档编号:12647267
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:23
- 大小:246.36KB
数据结构稀疏矩阵运算器课程设计报告书.docx
《数据结构稀疏矩阵运算器课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数据结构稀疏矩阵运算器课程设计报告书.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构稀疏矩阵运算器课程设计报告书
科技大学
数据结构课程设计说明书
题目:
稀疏矩阵运算器设计
学生:
学号:
专业:
计算机科学与技术
班级:
计09-1班
指导教师:
月峰
2011年6月24日
稀疏矩阵运算器设计
摘要
摘要:
设计一稀疏矩阵运算器。
实现转置,相加,相乘的功能。
用“带行逻辑信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相转置、相加和相乘的运算,采用分级的设计方法,分别设计出转置、加、乘运算器的子程序,相加运算时只要依次扫描两矩阵的行号和列号,若相等则相加后存入结果矩阵,不等时则存入较小的。
相减运算与相加运算相同,同样比较两矩阵的行号和列号,只是不等时,若第一个小,则存入第一个的元素,若第二个小,则存入其相反数。
相乘运算要先判断两矩阵能否相乘。
通过给顶的行号和列号找出原矩阵对应的元素值。
当在三元组表示中找到时返回其元素值,找不到时,说明该位置为0,因此返回0。
然后利用该函数计算出C的行号i和列号j处的元素值,若该值不为0,则存入矩阵,否则不存入。
通过实验表明本程序能够进行稀疏矩阵的相加,相减,相乘运算。
具备矩阵的加、减、乘功能。
关键词:
转置运算器;相加运算器;相乘运算器
稀疏矩阵运算器设计I
摘要II
第一章需求分析1
第二章概要设计2
第三章设计步骤6
3.1函数说明6
3.2设计步骤7
第四章设计理论分析方法20
4.1算法一:
矩阵转置20
4.2算法二:
矩阵加法20
4.3算法三:
矩阵乘法21
第五章程序调试23
第六章心得体会25
参考文献26
第一章需求分析
1.稀疏矩阵是指那些多数元素为零的矩阵。
利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。
实现一个能进行稀疏矩阵基本运算的运算器。
2.以“带行逻辑信息”的三元组顺序表表示稀疏矩阵,实现矩阵转置,求逆,实现两个矩阵相加、相减和相乘的运算。
稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。
3.演示程序以用户和计算机的对话方式执行,数组的建立方式为边输入边建立。
4.由题目要求可知:
首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。
5.程序可以对三元组的输入顺序不加以限制;根据对矩阵的行列,三元组作直接插入排序,从而进行运算时,不会产生错误。
6.在用三元组表示稀疏矩阵时,相加、乘积和相减所得结果矩阵应该另生成;矩阵求逆时,为了算法方便,使用二维数组存放。
7.程序在VC6.0环境下设计。
程序执行的命令为:
1.稀疏矩阵转置;2.稀疏矩阵加法;;3.稀疏矩阵乘法;4.退出
的工作。
第二章概要设计
1.抽象数据类型稀疏矩阵的定义如下:
ADTSparseMatrix{
数据对象:
D={aij|i=1,2,…,m;j=1,2,…,n;
aij∈ElemSet,m和n分别为矩阵的行数和列数}
数据关系:
R={Row,Col}
Row={﹤ai,j,ai,j+1﹥|1≤i≤m,1≤j≤n-1}
Col={﹤ai,j,ai+1,j﹥|1≤i≤m-1,1≤j≤n}
基本操作:
create(TSMatrix&TM)
操作结果:
创建稀疏矩阵矩阵TM
LocateELem(TSMatrixM,inti,intj,inte)
初始条件:
稀疏矩阵M存在
操作结果:
稀疏矩阵中是否存在非零元素A[i][j],若存在返回e
disp(TSMatrixTM)
初始条件:
稀疏矩阵TM存在
操作结果:
通常形式输出稀疏矩阵
InsertSortMatrix(TSMatrix&TM)
初始条件:
稀疏矩阵TM存在
操作结果:
根据对矩阵的行列,三元组TM作直接插入排序
TransposeSMatrix(TSMatrixM,TSMatrix&T)
初始条件:
稀疏矩阵M和T存在
操作结果:
求稀疏矩阵M转置的稀疏矩阵T
AddTSM(TSMatrixA,TSMatrixB,TSMatrix&C)
初始条件:
稀疏矩阵A,B和C存在
操作结果:
稀疏矩阵的加法运算:
C=A+B
SubTSM(TSMatrixA,TSMatrixB,TSMatrix&C)
初始条件:
稀疏矩阵A,B和C存在
操作结果:
稀疏矩阵的减法运算:
C=A-B
MultSMatrix(TSMatrixA,TSMatrixB,TSMatrix&C)
初始条件:
稀疏矩阵A,B和C存在
操作结果:
稀疏矩阵的乘法运算:
C=A×B
NiMatrix(TSMatrix&TM)
初始条件:
稀疏矩阵TM存在
操作结果:
稀疏矩阵求逆
}ADTSparseMatrix;
2.主程序:
voidmain()
{初始化;
do{
接受命令;
选择处理命令;
}while(命令!
=“退出”)
}
3.本程序有四个模块,调用关系如下:
主程序模块
图2.1
4本程序的流程图
开始
图2.2
第3章设计步骤
3.1函数说明
稀疏矩阵的三元组顺序表存储表示:
typedefstruct//定义三元组的元素
{
inti,j;
intv;
}Triple;
classtripletable
{//设计类来描述稀疏矩阵及其操作
public:
aaa*pdata;
tripledata[maxsize];
intrpos[maxsize];tripletable();
~tripletable();
voidconvert();
voidadd();
voidmulti();
private:
intm;
intn;
intt;
inta;
};
主要函数:
tripletable();
~tripletable();
voidconvert();
voidadd();
voidmulti();
voidmain();
3.2设计步骤:
设计一个矩阵类实现矩阵的运算:
classtripletable(包含矩阵的各种运算函数)。
输入矩阵(以三元组形式输入非零元)
{
intk;
tripletableA,B;
cout<<"输入稀疏矩阵A的行数,列数和非零元个数:
";
cin>>A.m>>A.n>>A.t;
for(k=1;k<=A.t;k++)
{
printf("输入第%d个非0元素的行数,列数和值:
",k);
cin>>A.data[k].i>>A.data[k].j>>A.data[k].v;
}
输出矩阵:
intc[100][100]={0};
for(k=1;k<=B.t;k++)
{
c[B.data[k].i][B.data[k].j]=B.data[k].v;
}
cout<<"转置(加法,乘法)结果为:
"< for(k=1;k<=B.n;k++) { for(intl=1;l<=B.m;l++) cout< cout< } } 转置矩阵: voidtripletable: : convert()//矩阵的转置 { intk; tripletableA,B; cout<<"输入稀疏矩阵A的行数,列数和非零元个数: "; cin>>A.m>>A.n>>A.t; for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值: ",k); cin>>A.data[k].i>>A.data[k].j>>A.data[k].v; } B.m=A.m;B.n=A.n;B.t=A.t; if(B.t) { intq=1,col; for(col=1;col<=A.n;++col) for(intp=1;p<=A.t;++p) if(A.data[p].j==col) { B.data[q].i=A.data[p].j; B.data[q].j=A.data[p].i; B.data[q].v=A.data[p].v; ++q; } } intshuru[100][100]={0}; for(k=1;k<=B.t;k++) { shuru[B.data[k].j][B.data[k].i]=B.data[k].v; } cout<<"输入为: "< for(k=1;k<=B.m;k++) { for(intl=1;l<=B.n;l++) cout< cout< } intresult[100][100]={0}; for(k=1;k<=B.t;k++) { result[B.data[k].i][B.data[k].j]=B.data[k].v; } cout<<"结果为: "< for(k=1;k<=B.n;k++) { for(intl=1;l<=B.m;l++) cout< cout< } } 以上主要设计思想: 通过三元组输入一个矩阵A,为了找到A的每一列中所有非零元素,需要对其三元组表A.data从第一行起整个扫描一遍,由于A.data是以A的行序为主序来存放每个非零元的,由此得到的恰是B.data的应有的顺序。 加法矩阵: voidtripletable: : add()//矩阵的加法 { intk; tripletableA,B; cout<<"输入稀疏矩阵A的行数,列数和非零元个数: "; cin>>A.m>>A.n>>A.t; for(k=1;k<=A.t;k++) { printf("输入第%d个非0元素的行数,列数和值: ",k); cin>>A.data[k].i>>A.data[k].j>>A.data[k].v; } cout<<"输入稀疏矩阵B的行数,列数和非零元个数: "; cin>>B.m>>B.n>>B.t; for(k=1;k<=B.t;k++) { printf("输入第%d个非0元素的行数,列数和值: ",k); cin>>B.data[k].i>>B.data[k].j>>B.data[k].v; } if(A.m! =B.m||A.n! =B.n) { cout<<"输入错误:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 稀疏 矩阵 运算器 课程设计 报告书