- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计-实现两稀疏矩阵的相加
8
设计一 矩阵的运算
一、问题描述
采用十字链表表示稀疏矩阵,并实现矩阵的加法运算, 要求:要检查有关运算的条件,并对错误的条件产生报警。
二、 设计思路
本程序需要实现两稀疏矩阵的相加,如果用一般的数组存储矩阵,然后进行相加会很简单,但是当用十字链表表示稀疏矩阵并进行相加时,这时无疑就增加了难度。本程序通过手动输入两个任意大小的矩阵(两矩阵的大小需要一样)并输入相应位置的数值,当输入的两个矩阵的行数和列数不一样时,给出提醒输入错误。当两矩阵一样时,分别通过调用十字链表函数,建立十字链表分别存储两矩阵中数值的相关信息。在进行矩阵相加时,先比较两矩阵在相应的同一行或列是否同时有数值。要是都有数值时,再进行比较此行或列中的同一位置是否有数,有数则进行计算并将结果插入矩阵C的十字链表中,无数时则分别插入矩阵C的十字链表的相应位置。要是两矩阵在同一行或列不是同时有值,则将相应有数值的行或列直接插入C矩阵。
三、 数据结构定义
本程序中考虑的内容就是矩阵中的数的十字链表相加,通过十字链表节省存储空间,并且也减少了计算量。在该方法中稀疏矩阵的每个非零元素可用一个包含5个域的结点表示结点结构信息如下图所示:
除了表示非零元素所在行、列和值的三元组问题外,还增加了两个链域:指向本行中下一个非零元素行指针域cptr和指向本列的下一个非零元素列指针域rptr。
typedef struct lnode
int i,j;//行坐标i,列坐标j
struct lnode *cptr,*rptr; // *cptr指向本行下一个元素,*rptr指向本列下一个元素
union
struct lnode *next; //指向下一行
datatype v;//存储稀疏矩阵该位置的数值uval;
link;
系统功能模块介绍
五、 程序清单
#include
#include
#define s 45
typedef int datatype;
typedef struct lnode
int i,j;
struct lnode *cptr,*rptr;
union
struct lnode *next;
datatype v;uval;
link;
int flag0;
link *creatlinkmat
/*建立稀疏矩阵的函数,返回十字链表头指针*/
link *p,*q,*head,*cp[s];
int i,j,k,m,n,t,s;
datatype v;
printf行、列、非零元素个数空格分隔:;
scanf%d %d %d,m,n,t; /*输入行、列,非零元素个数*/
ifmnsm; else sn; headlink *mallocsizeoflink; /*建立十字链表头结点*/
head-im;head-jn;
cp[0]head; /*cp[]是指针数组,分别指向头结点和行、列表头结点*/
fori1;is;i++ /*建立头结点循环链表*/
plink *mallocsizeoflink;
p-i0;p-j0;
p-rptrp;p-cptrp;
cp[i]p; cp[i-1]-uval.nextp;
cp[s]-uval.nexthead;printf请输各个元素的行号、列号、值空格分隔:\n;
fork1;kt;k++
printf 第%d个元素:,k;
scanf%d %d %d,i,j,v;
plink *mallocsizeoflink;
p-ii; p-jj; p-uval.vv; qcp[i];
whileq-rptr!cp[i]q-rptr-jj
-rptr;p-rptrq-rptr;q-rptrp;qcp[j];
whileq-cptr!cp[j]q-cptr-ii
-cptr; p-cptrq-cptr; q-cptrp;
return head;
void insertint i,int j,int v,link *cp[]
/*插入结点函数*/
link *p,*q;
plink *mallocsizeoflink;
p-ii;p-jj;p-uval.vv;
/*以下是经*p结点插入第i行链表中 */qcp[i];
whileq-rptr!cp[i]q-rptr-jj
-rptr; /*在第i行中找第一个列号大于j的结点*q-rptr*/
/*找不到时,*q是该行表上的尾结点*/
p-rptrq-rptr;
q-rptrp;/* *p插入在*q之后 */
/*以下是将结点插入第j列链表中*/
qcp[j];//取第j列表头结点
whileq-cptr!cp[j]q-cptr-ii
-cptr ; /*在第j行中找第一个
您可能关注的文档
最近下载
- 睿能热泵热水机安装手册-上海海立睿能.PDF
- 林业系统事业单位招聘考试《林业知识》真题库及答案1000题(参考).docx VIP
- 铁路客运车站标识系统暂行技术条件.doc VIP
- 基于产教融合背景下的高职汽车专业建设研究.pptx VIP
- 金银花生产技术规程.pdf VIP
- 山东省青岛实验高中2024届高一数学第二学期期末统考试题含解析.doc VIP
- 青岛《海绵城市设施运行维护导则》(2019修订版).pdf
- 2025年人教版小学六年级数学下册奥数竞赛测试考试题(附答案解析).docx VIP
- 课程思政教学比赛案例:《数字电子技术》课程.docx VIP
- 巧克力糖自动包装机.doc VIP
文档评论(0)