mu+1)*sizeof(OLink))#"> mu+1)*sizeof(OLink))#" />
矩阵相加(十字链表)

矩阵相加(十字链表)

ID:17740544

大小:30.50 KB

页数:7页

时间:2018-09-05

矩阵相加(十字链表)_第1页
矩阵相加(十字链表)_第2页
矩阵相加(十字链表)_第3页
矩阵相加(十字链表)_第4页
矩阵相加(十字链表)_第5页
资源描述:

《矩阵相加(十字链表)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、矩阵相加(十字链表)/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"#defineLEN(OLink*)malloc((M->mu+1)*sizeof(OLink))#defineLDN(OLink*)malloc((M->nu+1)*sizeof(OLink))#defineLRN(structOLNode*)malloc(sizeof(structOLNode))typedefstructOLNode{inti,j,e;//非0元的行数、列数、值str

2、uctOLNode*right,*down;//非0元所在的行表、列表的后继链域}*OLink;typedefstruct{OLink*rhead,*chead;//行表、列表的向量基址intmu,nu,tu;//稀疏矩阵的行数、列数、非0元个数}CrossList;voidCreateSMatrix_OL(CrossList*M)//创建稀疏矩阵(用十字链表表示){OLinkp,q;intm,n,k;q=LRN;if(!q)printf("内存分配失败!");printf("请输入矩阵的行数,列数,非零元个数:(用空格隔

3、开,按回车结束,下同)");scanf("%d%d%d",&M->mu,&M->nu,&M->tu);M->rhead=LEN;M->chead=LDN;if((!M->rhead)

4、

5、(!M->chead))printf("内存分配失败!");for(m=1;m<=M->mu;++m)M->rhead[m]=NULL;//初始化行列头指针向量for(n=1;n<=M->nu;++n)M->chead[n]=NULL;//各行列链表为空链表for(k=1;k<=M->tu;++k){p=LRN;if(!p)printf

6、("内存分配失败!");printf("请输入第%d个非0元素的行数,列数,值:",k);//可任意次序输入非0元scanf("%d%d%d",&p->i,&p->j,&p->e);if((M->rhead[p->i]==NULL)

7、

8、(M->rhead[p->i]->j>p->j)){p->right=M->rhead[p->i];M->rhead[p->i]=p;}else//查询在行表中的插入位置{for(q=M->rhead[p->i];(q->right!=NULL)&&(q->right->jj);q=

9、q->right);p->right=q->right;q->right=p;//完成行插入}if((M->chead[p->j]==NULL)

10、

11、(M->chead[p->j]->i>p->i)){p->down=M->chead[p->j];M->chead[p->j]=p;}else//查询在列表中的插入位置{for(q=M->chead[p->j];(q->down!=NULL)&&(q->down->ii);q=q->down);p->down=q->down;q->down=p;//完成列插入}}}void

12、Print_List(CrossListM)//输出十字链表所表示的稀疏矩阵{inti,k,n;OLinkp;for(p=M.rhead[1],i=1;i<=M.mu;++i,p=M.rhead[i]){for(k=1;k<=M.nu;++k){if(p!=NULL){if(k==p->j){n=p->e;p=p->right;}elsen=0;}elsen=0;printf("%6d",n);}printf("");}}CrossList*AddCrossList(CrossList*A,CrossListB)//实现矩

13、阵相加{intj,i;OLinkpa,pb,pre,p,q,*hl;pa=A->rhead[1];pb=B.rhead[1];pre=NULL;//令pa和pb指向A和B的第一行的第一个非0元素的结点hl=(OLink*)malloc((A->nu+1)*sizeof(OLink));if(!hl)printf("内存分配失败!");for(j=1;j<=A->nu;++j)hl[j]=A->chead[j];//hl初始化for(i=1;i<=A->mu;++i,pa=A->rhead[i],pb=B.rhead[i],

14、pre=NULL)//pa和pb指向每一行的第一个非0元结点,直至最后一行{while(pb!=NULL)//处理B的一行,直至本行中无非0元素的结点{if((pa==NULL)

15、

16、(pa->j>pb->j))//在A中插入一个pb所指结点的复制接点{p=LRN;if(!p)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。