- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例. 三对角矩阵的压缩存储 在十字链表中将稀疏矩阵每一行的非零元素通过right域链接成一个带有表头结点的行循环链表,将每一列的非零元素通过通过down域链接成一个带有表头结点的列循环链表。 因此,每个非零元素即是第i行循环链表中的一个结点又是第j列循环链表中的一个结点。由于整个稀疏矩阵是由十字交叉的链结构来表示的,故称其为十字链表。如对下面的稀疏矩阵A可由如下图所示的十字链表来表示。 3 0 0 7 0 0 -1 0 2 0 0 0 0 0 0 0 0 0 0 -8 A= 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 3 1 4 7 3 1 2 2 3 -1 5 4 -8 H1 H2 H3 H4 H5 H1 H2 H3 H4 H5 HA 5 4 0 0 0 0 0 0 0 0 0 0 1 1 3 1 4 7 3 1 2 2 3 -1 5 4 -8 H1 H2 H3 H4 H5 HB 在表示有t个非零元素的m×n的矩阵的十字链表中,共有t+max(m,n)+1个结点,每个结点大约需要占用2~3个存储单元。因此,只在矩阵非零元素个数t比矩阵的阶m×n小的多的条件下,十字链表的存储开销才小于矩形结构的二维数组的开销m×n。 以上给出了稀疏矩阵的一种新的存储思想,但如何将一个已知的稀疏矩阵以十字链表表示出来,还是一个需要解决的问题。下面我们就来讨论在内存中建立十字链表的具体算法。 首先输入三元组(m,n,t)它们是要存储矩阵的行数,列数及非零元素个数,紧接着输入t个形如(i,j,aij)的三元组,它们分别代表了t个非零元素行、列值及元素值,其输入次序是按矩阵中以行为主顺序输入的。如此,对于前面图中所示的含有5个非零元素的稀疏矩阵A。其输入的数据依次为: 5,4,5;1,1,3;1,4,7;2,3,-1;3,1,2;5,4,8 算法中还需引入一辅助工作数组: hdn:p[1:p](p=max(m,n)) 及指针变量last。 其中hdn[i]是指向十字链表中第i行(也是第i列)行(列)链表的表头结点的指针,last是指向当前所建的行链表的最右(后)面的那个结点。这样,建立十字链表的算法Mread(A)执行的大致过程是: i)按前述规定建立p个表头结点(不包括HA)。 ii)建立每个行循环链表,在此过程中第i个链表示的表头结点的val域先用来跟踪第i列的列链表当前最下(后)面的那个结点,其作用相当于建立行链表时的指针last。 iii)建立表头结点HA,并将全体p+1个表头结点链成循环链表。算法具体描述如下: void Mread(A) { scanf(“%d,%d,%d”,m,n,t); p=max(m,n);求出m,n中的最大值; for (i=1;i=p;i++) { x=new orthogonalNode; hdn[i]=x; x-row=x-col=0; x-right=x-val=x; } crow=1;last=hdn[1]; for (i=1;i=t;i++) { scanf(“%d,%d,%d”,rrow,cool,val); if rrowcrow //不等式成立时说明前面第crow行已无非零元素 应转入处理rrow行 { last-right=hdn[crow]; //将第crow行的行链表首尾相接构成循环 crow=rrow;last=hdn[crow] } x=new orthogonalNode; x-row=rrow; x-col=ccol; x-val=val; //建立一个非零元素的结点 last-right=x; last=x; (hdn[cool]-val)-down=x; //建立列链 hdn[cool]-val=x; //追踪当前列链表的最下面一个结点 } if (t!=0) last-right=hdn
您可能关注的文档
最近下载
- 诗歌鉴赏-2025年中考语文专项复习(辽宁专用)(解析版).pdf VIP
- 2023年天津市公务员考试《行测》真题及答案.pdf VIP
- DB3710T 104-2020 现代苹果园支架支撑系统架设技术规范 .pdf VIP
- 基于springboot的社区老人健康信息管理系统的设计与开发.docx VIP
- ISO31000-2024风险管理标准-中文版.pptx VIP
- 高中英语词汇前缀及合成词+清单-2025届高三下学期英语二轮复习专项.docx VIP
- 高考英语复习之合成词人教版+课件-2025届高三下学期英语二轮复习专项.pptx VIP
- 头疗课件培训.ppt VIP
- 《ISO31000:2024风险管理指南》指导手册(雷泽佳译2024-04).pptx VIP
- 危重病人皮肤管理新进展.pptx VIP
原创力文档


文档评论(0)