文档详情

稀疏矩阵乘法运算.doc

发布:2017-06-11约3.35千字共8页下载文档
文本预览下载声明
稀疏矩阵的乘法运算 程序代码: #includeiostream.h #includefstream.h #includestdio.h #includestdlib.h #includestring.h #includemath.h #define Ture 1 #define Overflow -1 typedef struct OLnode { int i,j; int e; struct OLnode *right,*down; }OLnode,*Olink; typedef struct { Olink *rhead,*chead; int mu,nu,tu; }Crosslist; //在十字链表M.rhead[row]中插入一个t结点 void insert_row(Crosslist M,OLnode *t,int row) { OLnode *p; int col=t-j; if(M.rhead[row]==NULL||M.rhead[row]-jcol) { t-right=M.rhead[row]; M.rhead[row]=t; } else { for(p=M.rhead[row];p-rightp-right-jcol;p=p-right);//寻找在行表中的插入位置 t-right=p-right; p-right=t; } } //在十字链表M.chead[col]中插入一个结点t void insert_col(Crosslist M,OLnode *t,int col) { OLnode *p; int row=t-i; if(M.chead[col]==NULL||M.chead[col]-irow) { t-down=M.chead[col]; M.chead[col]=t; } else { for(p=M.chead[col];p-downp-down-irow;p=p-down);//寻找在列表中的插入位置 t-down=p-down; p-down=t; } } //创建十字链表并存入数据 void input(Crosslist M) { int m,n,t; cout请输入矩阵的行和列的个数及非零元个数; cinmnt; 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(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.rhead[i]=NULL; for(int j=0;j=n;j++) M.chead[j]=NULL; cout请输入矩阵endl; int k=1; for(cinrowcole;row!=0k=t;cinrowcole,k++) { q=(OLnode *) malloc(sizeof(OLnode)); if(!t) exit(Overflow); q-e=e; //生成结点 q-i=row; 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+1
显示全部
相似文档