以三元组形式键盘输入稀疏矩阵非零元素.docx

上传人:b****5 文档编号:6516789 上传时间:2023-01-07 格式:DOCX 页数:9 大小:15.83KB
下载 相关 举报
以三元组形式键盘输入稀疏矩阵非零元素.docx_第1页
第1页 / 共9页
以三元组形式键盘输入稀疏矩阵非零元素.docx_第2页
第2页 / 共9页
以三元组形式键盘输入稀疏矩阵非零元素.docx_第3页
第3页 / 共9页
以三元组形式键盘输入稀疏矩阵非零元素.docx_第4页
第4页 / 共9页
以三元组形式键盘输入稀疏矩阵非零元素.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

以三元组形式键盘输入稀疏矩阵非零元素.docx

《以三元组形式键盘输入稀疏矩阵非零元素.docx》由会员分享,可在线阅读,更多相关《以三元组形式键盘输入稀疏矩阵非零元素.docx(9页珍藏版)》请在冰豆网上搜索。

以三元组形式键盘输入稀疏矩阵非零元素.docx

以三元组形式键盘输入稀疏矩阵非零元素

 以三元组形式键盘输入稀疏矩阵非零元素

#include

#include

//usingnamespacestd;

template

structB

{inti;

intj;

Tv;

};

template

classX_Array

{

private:

intmm;

intnn;

inttt;

B*bb;

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[tt];

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,Bb[])

{intk;

mm=m;nn=n;tt=t;

bb=newB[tt];

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;

}

//有一般稀疏矩阵转换templatevoidX_Array:

:

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[tt];

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_ArrayX_Array:

:

tran_X_Array()

{X_Arrayat;

intk,p,q;

at.mm=nn;at.nn=mm;at.tt=tt;at.bb=newB[tt];k=0;

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_ArrayX_Array:

:

operator+(X_Array&b)

{

X_Arrayc;

B*a;

Td;

intm,n,k,p;

if((nn!

=b.nn)||(nn!

=b.nn))cout<<"不能相加~"<

else

{a=newB[tt+b.tt];

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[p];

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_ArrayX_Array:

:

operator*(X_Array&b)

{

X_Arraycc;

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_Arraya,b,c,d;

//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输入错误!

请重新输入!

"<

}

}

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

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1