资源描述:
《稀疏矩阵乘法运算》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、稀疏矩阵的乘法运算程序代码:#include#include#include#include#include#include#defineTure1#defineOverflow-1typedefstructOLnode{inti,j;inte;structOLnode*right,*down;}OLnode,*Olink;typedefstruct{Olink*rhead,*chead;intmu,nu,t
2、u;}Crosslist;//在十字链表M.rhead[row]中插入一个t结点voidinsert_row(Crosslist&M,OLnode*t,introw){OLnode*p;intcol=t->j;if(M.rhead[row]==NULL
3、
4、M.rhead[row]->j>col){t->right=M.rhead[row];M.rhead[row]=t;}else{for(p=M.rhead[row];p->right&&p->right->j
right);//寻找在行表中的插入位置t->r
5、ight=p->right;p->right=t;}}//在十字链表M.chead[col]中插入一个结点tvoidinsert_col(Crosslist&M,OLnode*t,intcol){OLnode*p;introw=t->i;if(M.chead[col]==NULL
6、
7、M.chead[col]->i>row){t->down=M.chead[col];M.chead[col]=t;}else{for(p=M.chead[col];p->down&&p->down->idown);//寻找在列表
8、中的插入位置t->down=p->down;p->down=t;}}//创建十字链表并存入数据voidinput(Crosslist&M){intm,n,t;cout<<"请输入矩阵的行和列的个数及非零元个数";cin>>m>>n>>t;if(t>m*n)exit(Overflow);M.mu=m;M.nu=n;M.tu=t;introw,col,e;OLnode*q;M.rhead=(Olink*)malloc((m+1)*sizeof(Olink));M.chead=(Olink*)malloc((n+1)*sizeof(
9、Olink));if(!M.rhead)exit(Overflow);if(!M.chead)exit(Overflow);for(inti=0;i<=m+1;i++)M.rhead[i]=NULL;for(intj=0;j<=n;j++)M.chead[j]=NULL;cout<<"请输入矩阵"<>row>>col>>e;row!=0&&k<=t;cin>>row>>col>>e,k++){q=(OLnode*)malloc(sizeof(OLnode));if(!t)exit(Ov
10、erflow);q->e=e;//生成结点q->i=row;q->j=col;insert_row(M,q,row);//完成行插入insert_col(M,q,col);//完成列插入}}//矩阵M与矩阵N的乘法运算voidchengfa(CrosslistM,CrosslistN,Crosslist&Q){if(M.nu!=N.mu)exit(Overflow);Q.mu=M.mu;Q.nu=N.nu;Q.tu=0;OLnode*p,*q,*t;Olinktemp;inte,col;Q.rhead=(Olink*)mall
11、oc((Q.mu+1)*sizeof(Olink));Q.chead=(Olink*)malloc((Q.nu+1)*sizeof(Olink));if(!Q.rhead)exit(Overflow);if(!Q.chead)exit(Overflow);temp=(Olink)malloc((Q.nu+1)*sizeof(OLnode));for(inti=0;i<=Q.mu+1;i++)Q.rhead[i]=NULL;for(intj=0;j<=Q.nu;j++)Q.chead[j]=NULL;for(introw=1;r
12、ow<=Q.mu;row++){for(intk=1;k<=Q.nu;k++)temp[k].e=0;for(p=M.rhead[row];p!=NULL;p=p->right){introw2=p->j;for(q=N.rhead[row2];q;q=q->right)//