稀疏矩阵的相关操作(2)

2019-03-28 08:27

第一章 课题描述

1.1 课程设计的目的

本课程设计是为了配合《数据结构》课程的开设,通过设计一完整的程序,使学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并用TC上机调试的基本方法。 利用三元组实现稀疏矩阵的有关算法。 1.2 问题描述

1.2.1 稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵M和N的相加矩阵Q,并输出Q。

1.2.2 求出M的转置矩阵T,输出T。 1.3 基本要求

稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则通常以阵列形式列出。

第 2 页 共26页

第二章 问题分析和任务定义

2.1 结构设计

2.1.1 以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘以及转置的运算。

2.1.2 稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则通常以阵列形式列出。

2.1.3 首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20。

2.1.4 程序可以对三元组的输入顺序加以限制,例如,按行优先。注意研究教材的算法,以便提高计算效率。

2.1.5 在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放 2.2 算法思想

2.2.1 主函数设置循环和选择语句进行运算循环和选择,进行稀疏矩阵的加法,减法,乘法,转置和是否继续运算5个分支开关进行运算选择。

2.2.2 设置函数分别实现稀疏矩阵的输入,输出,加法,减法,乘法以及转置。 2.2.3 在数组结构体中设置存放每行第一个非零元在其数组存储结构单元的位置的存储单元,若该行无非零元,则存为0。

第 3 页 共26页

第三章 逻辑设计

3.1 模块划分

3.1.1 Typedef struct存放各行第一个非零元在存储数组中的位置,若该行无非零元,则其rpos[]值为零

3.1.2 Greatesmatrix(RLSMatrix &M)矩阵输入函数,输入各行非零元及其在矩阵中的行列数

3.1.3 TransposeSMatrix(RLSMatrix M,RLSMatrix &T) 矩阵转置

3.1.4 HeRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q) 矩阵求和 3.1.5 ChaRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q) 矩阵求差 3.1.6 MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix &Q) 矩阵求积 3.2 函数调用图

开始用户选择计算类型键入Y继续运算键入A加法运算键入B减法运算键入C乘法运算键入D转置运算等待用户键入N结束运算图3.2 关系调用图

第 4 页 共26页

3.3 流程图

开始void TransposeSMatrix(RLSMatrix M,RLSMatrix &T){int q,p;T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;if(T.tu)q=1for(int col=1;col<=M.nu;++col)for(p=1;p<=M.tu;++p)if(M.data[p].j==col)T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e; ++q;return i结 束

图3.3 流程

第 5 页 共26页

第四章 详细设计

4.1 定义矩阵

#include #include #define OK 1 #define ERROR 0

#define MAXSIZE 100 //非零元个数的最大值 #define MAXROW 100 typedef struct triple {

int i,j; //行下标,列下标 int e; //非零元素值 }triple;

typedef struct RLSMatrix {

triple data[MAXSIZE + 1]; //非零元三元组表

int rpos[MAXROW + 1]; //各行第一个非零元的位置表 int mu,nu,tu,num; //矩阵行数、列数和非零元个数

}RLSMatrix; 4.2 创建稀疏矩阵

Greatesmatrix(RLSMatrix &M) //创建稀疏矩阵 {

int e,i,m,n;

M.data[0].i=0; //为以下比较顺序做准备

printf(\请输入矩阵的行数,列数,和非零元素的个数:\ scanf(\ for(i=1;i<=M.tu;i++)

{

printf(\请按行序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:\

第 6 页 共26页


稀疏矩阵的相关操作(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:周工作总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: