数据结构——稀疏矩阵运算器.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 课程设计报告 设计题目:稀疏矩阵运算器 年 级 班 级 姓 名 学 号 指导教师 起止时间 2010 年 二 学期 一、实验目的 通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。 二、问题描述(具体任务) 设计、实现两个稀疏矩阵在十字链表表示方法下的相加、相减、相乘。稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行储存和计算可以大大节省储存空间,提高计算效率。实现一个能进行称稀疏矩阵基本运算的运算器。 三、需求分析 该程序所做的工作的是稀疏矩阵运算器,实现两个稀疏矩阵的基本运算。此程序规定: 1、按照压缩存储的概念,只存储稀疏矩阵的非零元,以两个三元组{i,j,e}来表示矩阵的非零元的行,列和数值,就确定了一个非零元.由此,稀疏矩阵可由表示非零元的三元数组及行列数确定 2、用户输入数据作为三元组的行,列和非零元的个数,用空格隔开.并输入非零元的行,列和数值 3、本程序只对两个矩阵进行四则运算,所的结果矩阵应该另生成,用十字链表存放,并放入新的矩阵中,只要对矩阵求解就能求出答案. 四、算法设计思想及流程图 用十字链表存储方式实现稀疏矩阵的基本运算,此程序用到以下函数: void CreateSMatrix(CrossList R) //创建储存稀疏矩阵 void PrintSMatrix(CrossList R) //输出十字链表的函数 void MultSMatrix(CrossList M,CrossList N,CrossList Q) //实现矩阵乘法 int AddMatrix(CrossList M,CrossList N,CrossList Q) //实现矩阵加法 int SubtSMatrix(CrossList M,CrossList N,CrossList Q) //实现矩阵减法 void main()//主函数调用以上函数来实现其功能: 首先调用CreateSMatrix()创建矩阵M和N,并输入稀疏矩阵的行数,列数,非零元素个数,通过PrintSMatrix()输出矩阵M和N,根据提示选择相应的运算,当进行加或减运算时,如果两个矩阵的行和列不相等时,就无法得到结果,并出现提示错误信息,当进行乘法运算时,要求矩阵M的列数必须等于矩阵N的行数,否则无法进行乘法运算,为了进行多种运算通过主函数的Do----While循环来实现,退出循环条件是输入”+”、”-”、”*”以外的任意字符即可退出循环。 五、C语言源代码 #includestdio.h #includestdlib.h #define OVERFLOW -1 #define OK 1 #define NULL 0 //建立十字链表 typedef struct OLNode { int row,col; //该非零元的行和列下标 int e; struct OLNode *right,*down; //该非零元所在行表和列表的后继链域 }OLNode,*OLink; typedef struct{ OLink *rhead,*chead; //行和列链表头指针向量基址由CreateSMatrix分配 int mu,nu,tu; //系数矩阵的行数,列数和非零元个数 }CrossList; // 创建储存稀疏矩阵 void CreateSMatrix(CrossList R) { int m,n,t,i,j,k,a; OLink p,q; if(R.rhead) { R.rhead=NULL; R.chead=NULL; R.mu=0; R.nu=0; R.tu=0; } printf(\n请输入稀疏矩阵的行数 列数 非零元个数:); scanf(%d %d %d,m,n,t); R.mu=m; R.nu=n; R.tu=t; if(!(R.rhead=(OLink *)malloc((m+1)*sizeof(OLink))))exit(OVERFLOW); i

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档