以三元组形式键盘输入稀疏矩阵非零元素.docx
- 文档编号:6516789
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:9
- 大小:15.83KB
以三元组形式键盘输入稀疏矩阵非零元素.docx
《以三元组形式键盘输入稀疏矩阵非零元素.docx》由会员分享,可在线阅读,更多相关《以三元组形式键盘输入稀疏矩阵非零元素.docx(9页珍藏版)》请在冰豆网上搜索。
以三元组形式键盘输入稀疏矩阵非零元素
以三元组形式键盘输入稀疏矩阵非零元素
#include
#include
//usingnamespacestd;
template
structB
{inti;
intj;
Tv;
};
template
classX_Array
{
private:
intmm;
intnn;
inttt;
B
int*pos;
int*num;
public:
voidin_X_Array();
voidcp_X_Array(int,int,int,B
voidth_X_Array(int,int,T[]);
voidprt_X_Array();
X_Arraytran_X_Array();
X_Arrayoperator+(X_Array&);
X_Arrayoperator*(X_Array&);
};
//以三元组形式键盘输入稀疏矩阵非零元素template
voidX_Array
:
in_X_Array(){intk,m,n;
cout<<"输入行数列数非零元素个数:
";
cin>>mm>>nn>>tt;
bb=newB
cout<<"输入行数列数非零元素值:
"< {cin>>m>>n>>bb[k].v; bb[k].i=m-1;bb[k].j=n-1; } pos=newint[mm]; num=newint[mm]; for(k=0;k for(k=0;k num[bb[k].i]=num[bb[k].i]+1;pos[0]=0; for(k=1;k pos[k]=pos[k-1]+num[k-1];return; } //复制三元组数组 template voidX_Array : cp_X_Array(intm,intn,intt,B {intk; mm=m;nn=n;tt=t; bb=newB for(k=0;k {bb[k].i=b[k].i-1;bb[k].j=b[k].j-1;bb[k].v=b[k].v;} pos=newint[mm];num=newint[mm];for(k=0;k num[bb[k].i]=num[bb[k].i]+1;pos[0]=0; for(k=1;k pos[k]=pos[k-1]+num[k-1];return; } //有一般稀疏矩阵转换template : th_X_Array(intm,intn,Ta[]) {intk,t=0,p,q; Td; for(k=0;k if(a[k]! =0)t=t+1; mm=n;nn=n;tt=t; bb=newB k=0; for(p=0;p for(q=0;q {d=a[p*n+q]; if(d! =0) {bb[k].i=p;bb[k].j=q;bb[k].v=d; k=k+1; } } pos=newint[mm]; num=newint[mm]; for(k=0;k num[bb[k].i]=num[bb[k].i]+1;pos[0]=0; for(k=1;k pos[k]=pos[k-1]+num[k-1]; return; } //按行输出稀疏矩阵 template voidX_Array : prt_X_Array(){intk,kk,p; for(k=0;k { p=pos[k]; for(kk=0;kk if((bb[p].i==k)&&(bb[p].j==kk)) { cout< elsecout< cout< return; } //稀疏矩阵转置template X_Array : tran_X_Array() {X_Array intk,p,q; at.mm=nn;at.nn=mm;at.tt=tt;at.bb=newB for(p=0;p for(q=0;q { if(bb[q].j==p) {at.bb[k].i=bb[q].j; at.bb[k].j=bb[q].i; at.bb[k].v=bb[q].v; k=k+1; } } at.pos=newint[at.mm]; at.num=newint[at.nn]; for(k=0;k at.num[at.bb[k].i]=at.num[at.bb[k].i]+1;at.pos[0]=0; for(k=1;k at.pos[k]=at.pos[k-1]+at.num[k-1];return(at); } //稀疏矩阵相加 template X_Array : operator+(X_Array { X_Array B Td; intm,n,k,p; if((nn! =b.nn)||(nn! =b.nn))cout<<"不能相加~"< else {a=newB p=0; for(k=0;k { m=pos[k];n=b.pos[k]; while((bb[m].i==k)&&(b.bb[n].i==k)) { if(bb[m].j==b.bb[n].j) {d=bb[m].v+b.bb[n].v; if(d! =0) { a[p].i=k;a[p].j=bb[m].j; a[p].v=d;p=p+1; } m=m+1;n=n+1; } elseif(bb[m].j {a[p].i=k;a[p].j=bb[m].j; a[p].v=bb[m].v;p=p+1; m=m+1; } else {a[p].i=k;a[p].j=b.bb[n].j; a[p].v=b.bb[n].v;p=p+1; n=n+1; } } while(bb[m].i==k) {a[p].i=k;a[p].j=bb[m].j; a[p].v=bb[m].v;p=p+1; m=m+1; } while(bb[n].i==k) {a[p].i=k;a[p].j=b.bb[n].j; a[p].v=b.bb[n].v;p=p+1; n=n+1; } } c.mm=mm;c.nn=nn;c.tt=p; c.bb=newB for(k=0;k { c.bb[k].i=a[k].i; c.bb[k].j=a[k].j; c.bb[k].v=a[k].v; } deletea; c.pos=newint[c.mm]; c.num=newint[c.mm]; for(k=0;k c.num[k]=0; for(k=0;k c.num[c.bb[k].i]=c.num[c.bb[k].i]+1; c.pos[0]=0; for(k=1;k c.pos[k]=c.pos[k-1]+c.num[k-1]; } return(c); } //稀疏矩阵相乘 template X_Array : operator*(X_Array&b) { X_Array intk,m,n,p,t; T*c; if(nn! =b.mm) cout<<"两矩阵无法相乘~"< else { c=newT[mm*b.nn]; k=0; for(m=0;m for(n=0;n { c[k]=0;k=k=1; } for(m=0;m { k=bb[m].j; n=b.pos[k]; t=b.pos[k]+b.num[k]; while(n! =t) { p=bb[m].i*b.nn+b.bb[n].j; c[p]=c[p]+bb[m].v*b.bb[n].v; n=n=1; } } cc.th_X_Array(mm,b.nn,c); deletec; } return(cc); } voidmain()//系统主模块{ charchoice; intj=1; X_Array //charsearch[10]; while(j) {cout<<"\n\n\n\n"; cout<<"\t\t\t-----------------稀疏矩阵运算器--------------\n"; cout<<"\n\t\t\t*********************************************"; cout<<"\n\t\t\t**1-------输入稀疏矩阵**"; cout<<"\n\t\t\t**2-------输出稀疏矩阵**"; cout<<"\n\t\t\t**3-------系数矩阵的转置**"; cout<<"\n\t\t\t**4-------稀疏矩阵的加法**"; cout<<"\n\t\t\t**5-------稀疏矩阵的乘法**"; cout<<"\n\t\t\t**0-------退出**"; cout<<"\n\t\t\t*********************************************"; cout<<"\t\t\t请选择菜单号(0--7): "< cin>>&choice; if(choice=='1') a.in_X_Array(); elseif(choice=='2') a.prt_X_Array(); elseif(choice=='3') b=a.tran_X_Array(); elseif(choice=='4') c=a+b; elseif(choice=='5') d=a*b; elseif(choice=='0') {j=0; cout<<"\t\t\t程序结束! \n"< elsecout<<"\n输入错误! 请重新输入! "< } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三元 形式 键盘输入 稀疏 矩阵 元素