数据结构课程设计报告--稀疏矩阵运算器.doc
文本预览下载声明
闽江学院
数据结构
课程设计报告
题目: 稀疏矩阵运算器
院 系: 计算机科学系
专业班级: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))其对应的稀疏矩阵为:
1.3 输出的形式
运算结果的矩阵以通常的阵列形式输出;
1.4程序所能达到的功能
该程序可以实现以三元组形式输入两个矩阵,求出两个矩阵的和、差、积;并可根据输入的矩阵的行列数不同判别是否可以进行相加、减、乘,并重新输入正确的矩阵;
1.5测试数据
测试的数据及其结果如下:
矩阵M 矩阵N 矩阵Q
加法:
+ =
减法:
- =
乘法:
X =
1.6 确定解决方案
进入运算器界面后选择要实行的操作,按1实现矩阵相加,调用函数AddSMatrix,若输入的两个矩阵行列数不相等,则提示输入错误,重新输入矩阵进行加法运算;按2实现矩阵相乘,若输入的第一矩阵的列数不等于第二个矩阵的行数,则提示输入错误,重新输入矩阵进行乘法运算;按3实现矩阵相减,若输入的两个矩阵行列数不相等,则提示输入错误,重新输入矩阵进行减法运算;按4退出程序
以加法为例实现运算过程,如下:(稀疏矩阵的和为Q)
第一个稀疏矩阵M的三元组为((1,1,10),(2,3,9),(3,1,-1))))))?以顺序存储结构来表示三元组表,则可得到稀疏矩阵的一种压缩存储方式——三元组顺序表。
/* 稀疏矩阵的三元组顺序表存储表示 */
#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;
显示全部