稀疏矩阵乘法运算.doc

上传人:啊飒飒 文档编号:11478817 上传时间:2021-08-07 格式:DOC 页数:8 大小:72.50KB
返回 下载 相关 举报
稀疏矩阵乘法运算.doc_第1页
第1页 / 共8页
稀疏矩阵乘法运算.doc_第2页
第2页 / 共8页
稀疏矩阵乘法运算.doc_第3页
第3页 / 共8页
稀疏矩阵乘法运算.doc_第4页
第4页 / 共8页
稀疏矩阵乘法运算.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《稀疏矩阵乘法运算.doc》由会员分享,可在线阅读,更多相关《稀疏矩阵乘法运算.doc(8页珍藏版)》请在三一文库上搜索。

1、稀疏矩阵的乘法运算 程序代码:#include#include#include#include#include#include#define Ture 1#define Overflow -1typedef struct OLnode int i,j; int e; struct OLnode *right,*down;OLnode,*Olink;typedef struct Olink *rhead,*chead; int mu,nu,tu;Crosslist;/在十字链表M.rheadrow中插入一个t结点void insert_row(Crosslist &M,OLnode *t,int

2、 row) OLnode *p; int col=t-j; if(M.rheadrow=NULL|M.rheadrow-jcol) t-right=M.rheadrow; M.rheadrow=t; else for(p=M.rheadrow;p-right&p-right-jright);/寻找在行表中的插入位置 t-right=p-right; p-right=t; /在十字链表M.cheadcol中插入一个结点tvoid insert_col(Crosslist &M,OLnode *t,int col) OLnode *p; int row=t-i; if(M.cheadcol=NUL

3、L|M.cheadcol-irow) t-down=M.cheadcol; M.cheadcol=t; else for(p=M.cheadcol;p-down&p-down-idown);/寻找在列表中的插入位置 t-down=p-down; p-down=t; /创建十字链表并存入数据void input(Crosslist &M) int m,n,t; coutmnt; if(tm*n) exit(Overflow); M.mu=m; M.nu=n; M.tu=t; int row,col,e; OLnode *q; M.rhead=(Olink *)malloc(m+1)*sizeof

4、(Olink); M.chead=(Olink *)malloc(n+1)*sizeof(Olink); if(!M.rhead) exit(Overflow); if(!M.chead) exit(Overflow); for(int i=0;i=m+1;i+) M.rheadi=NULL; for(int j=0;j=n;j+) M.cheadj=NULL; cout请输入矩阵rowcole;row!=0&krowcole,k+) q=(OLnode *) malloc(sizeof(OLnode); if(!t) exit(Overflow); q-e=e; /生成结点 q-i=row;

5、 q-j=col; insert_row(M,q,row); /完成行插入 insert_col(M,q,col); /完成列插入 /矩阵M与矩阵N的乘法运算void chengfa(Crosslist M,Crosslist N,Crosslist &Q) if(M.nu!=N.mu) exit(Overflow);Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;OLnode *p,*q,*t;Olink temp;int e,col; Q.rhead=(Olink *)malloc(Q.mu+1)*sizeof(Olink); Q.chead=(Olink *)malloc(Q.nu

6、+1)*sizeof(Olink); if(!Q.rhead) exit(Overflow); if(!Q.chead) exit(Overflow);temp=(Olink)malloc(Q.nu+1)*sizeof(OLnode); for(int i=0;i=Q.mu+1;i+) Q.rheadi=NULL; for(int j=0;j=Q.nu;j+) Q.cheadj=NULL;for(int row=1;row=Q.mu;row+) for(int k=1;kright) int row2=p-j; for(q=N.rheadrow2;q;q=q-right)/将每一行的各列乘积存

7、入temp中 col=q-j; tempcol.e+=p-e*q-e; tempcol.i=row; tempcol.j=col; for(col=1;cole=tempcol.e; t-i=tempcol.i; t-j=tempcol.j; insert_row(Q,t,row); insert_col(Q,t,col); void output(Crosslist M) /输出矩阵M OLnode *pp; for(int i=1;i=M.mu;i+) pp=M.rheadi; for(int j=1;jj=j) int e=pp-e;couteright;elsecout0 ; coutendl; void main() Crosslist M,N,Q; input(M); input(N); cout矩阵M:endl; output(M); cout矩阵N:endl; output(N); chengfa(M,N,Q); cout矩阵M、N的乘积为:endl; output(Q);运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1