数据结构课程设计报告--稀疏矩阵运算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
闽江学院
数据结构
课程设计报告
题目:稀疏矩阵运算器
院系:计算机科学系
专业班级:10计算机科学与技术(网络工程)学号:
学生姓名:
指导教师:王润鸿
2011年12月23 日
目录:
1、分析问题和确定解决方案 (3)
1.1问题描述 (3)
1.2 输入的形式和输入值的范围 (3)
1.3 输出的形式 (3)
1.4 程序所能达到的功能 (3)
1.5 测试数据 (3)
1.6 确定解决方案 (4)
1.7所有抽象数据类型的定义 (4)
2、详细设计 (5)
2.1稀疏矩阵加法运算思路 (5)
2.2稀疏矩阵减法运算思路 (7)
2.3稀疏矩阵乘法运算思路 (9)
2.4创建稀疏矩阵 (11)
3、系统调试与测试 (12)
3.1程序的菜单界面 (12)
3.2 实现加法运算 (12)
3.3 实现减法运算 (13)
3.4实现乘法运算 (14)
4、结果分析 (15)
4.1、算法的时空分析 (15)
4.2、经验和体会 (15)
5、参考文献 (15)
1、分析问题和确定解决方案
1.1问题描述
稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计
算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。用三元组实现稀疏矩阵的相加、相减,相乘;
1.2输入的形式和输入值的范围
以三元组的形式输入,首先应输入矩阵的行数和列数,并判别给出的两个
矩阵的行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20;
例如:输入的三元组为:((1,1,10),(2,3,9),(3,1,-1))其对应的稀疏矩阵为:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡-0019000010 1.3 输出的形式
运算结果的矩阵以通常的阵列形式输出; 1.4程序所能达到的功能
该程序可以实现以三元组形式输入两个矩阵,求出两个矩阵的和、差、积;
并可根据输入的矩阵的行列数不同判别是否可以进行相加、减、乘,并重新输入
正确的矩阵;
1.5测试数据
测试的数据及其结果如下:
矩阵M 矩阵N 矩阵Q
加法:
⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡-0019000010 +
⎥⎥⎥⎦⎤
⎢⎢⎢⎣⎡--301100000 = ⎥⎥⎥⎦⎤
⎢⎢⎢⎣⎡-3008000010 减法:
⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡-0190010 - ⎥⎥⎥⎦
⎤
⎢⎢⎢⎣⎡--311000 = ⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡-32100010 乘法:
⎥⎥
⎥⎥⎦
⎤⎢
⎢⎢
⎢⎣⎡-7000
0001000000010034 X ⎥⎥⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎢⎢⎣⎡000001010024003 =
⎥⎥⎥⎥⎦
⎤⎢
⎢⎢
⎢⎣⎡-00001000806
0 1.6 确定解决方案
进入运算器界面后选择要实行的操作,按1实现矩阵相加,调用函数AddSMatrix ,若输入的两个矩阵行列数不相等,则提示输入错误,重新输入矩阵进行加法运算;按2实现矩阵相乘,若输入的第一矩阵的列数不等于第二个矩阵的行数,则提示输入错误,重新输入矩阵进行乘法运算;按3实现矩阵相减,若输入的两个矩阵行列数不相等,则提示输入错误,重新输入矩阵进行减法运算;按4退出程序
以加法为例实现运算过程,如下:(稀疏矩阵的和为Q) 第一个稀疏矩阵M 的三元组为((1,1,10),(2,3,9),(3,1,-1)) 第二个稀疏矩阵N 的三元组为((2,3,-1),(3,1,1),(3,3,-3))
M 的第一个三元组(1,1,10)与N 的第一个三元组(2,3,-1)比较,因行数1<2则Q 得到第一个三元组(1,1,10);M 的第二个三元组与N 的第一个三元组比较,因对应行列数相等则9+(-1)=8,次行列数就是Q 的行列数即得到Q 的第二个三元组为(2,3,8);M 第三个三元组(3,1,-1))与N 的第二个三元组进行比较,因对应行列数相等,且1+(-1)=0,则不进行相加;而此时只有 N 的第三个三元组(3,3,-3)符合条件,则Q 得到第三个三元组(3,3,-3);最终结果为 ((1,1,10),(2,3,8),(3,3,-3))
1.7所有抽象数据类型的定义
以顺序存储结构来表示三元组表,则可得到稀疏矩阵的一种压缩存储方式——三元组顺序表。
/* 稀疏矩阵的三元组顺序表存储表示 */
#define MAXSIZE 1000 //假设非零元个数的最大值为1000 typedef struct
{ int i,j; //该非零元的行下标和列下标 ElemType e; //该非零元数值 } Triple;
typedef struct
{ Triple data[MAXSIZE+1]; // 非零三元组表,data[0]未用
int mu,nu,tu; //矩阵的行数(<20)、列数(<20)和非零元个数 } TSMatrix;
在此,data 域中表示非零元得三元组是以行序为主序顺序排列的,这样有利于进行某些矩阵运算。
抽象数据类型稀疏矩阵的定义如下: ADT SparseMatrix{
数据对象:D={aij|i=1,2,3,…,m;j=1,2,…,n;