📄 操作2oooo.cpp
字号:
#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
#define maxsize 12500;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
/*建立三元组 RLSM*/
typedef struct
{int i,j;
int e;
}Tri;
typedef struct
{Tri data[12500];
int rops[1000];
int mu,nu,tu;
}RLSM;
/*稀疏矩阵的M转置N*/
void TSM(RLSM & M,RLSM & N)
{
int q,col,p;
N.mu=M.nu;
N.nu=M.mu;
N.tu=M.tu;
if(N.tu)
{
q=1;
for(col=1;col<=M.nu;col++)
for(p=0;p<=M.tu;p++)
if(M.data[p].j==col)
{
N.data[q].i=M.data[p].j;
N.data[q].j=M.data[p].i;
N.data[q].e=M.data[p].e;
++q;
}
}
}
/*稀疏矩阵的显示*/
void show(RLSM M)
{
int i,j,tu;
for(i=1,tu=1;i<=M.mu;i++)
{
for(j=1;j<=M.nu;j++)
if(i==M.data[tu].i&&j==M.data[tu].j)
{
cout<<setw(4)<<M.data[tu].e;
tu++;
}
else cout<<setw(4)<<0;
cout<<endl;
}
cout<<endl<<"三元组表示:"<<endl;
for(i=1;i<=M.tu;i++)
cout<<M.data[i].i<<" "<<M.data[i].j<<" "<<M.data[i].e<<endl;
cout<<"mu="<<M.mu<<'\t'<<"nu="<<M.nu<<'\t'<<"tu="<<M.tu<<endl;
}
/*稀疏矩阵中元素的删除*/
void deleteM(RLSM &M)
{
int i,j,tu,a,b;
cout<<"请输入要删除的元素的行和列:"<<endl;
cin>>a>>b;
i=1;
for(j=1;j<=M.tu;j++)
if(a==M.data[j].i&&b==M.data[j].j)
{
M.data[j].e=0;
i=0;
for(tu=j;tu<M.tu;tu++)
{
M.data[tu].i=M.data[tu+1].i;
M.data[tu].j=M.data[tu+1].j;
M.data[tu].e=M.data[tu+1].e;
}
M.tu--;
break;
}
if(i)
{
cout<<"输入超出范围!请重新输入:"<<endl;
deleteM(M);
}
}
/*稀疏矩阵中加入元素*/
void insertM(RLSM &M)
{int s,j,tu,a,b;
cout<<"请输入要插入元素的值:"<<endl;
cin>>s;
cout<<"请输入要插入的元素的行和列:"<<endl;
cin>>a>>b;
for(j=1;j<=M.tu;j++)
if(a<=M.data[j].i&&b<=M.data[j].j) break;
for(tu=M.tu+1;tu>j;tu--)
{
M.data[tu].i=M.data[tu-1].i;
M.data[tu].j=M.data[tu-1].j;
M.data[tu].e=M.data[tu-1].e;
}
M.data[j].i=a;
M.data[j].j=b;
M.data[j].e=s;
M.tu++;
}
/*求稀疏矩阵的和Q=M+N*/
int Add(RLSM M,RLSM N,RLSM &Q)
{
int p=1,q=1,k=1;
if(M.tu==0||N.tu==0){cout<<"-----Cannot find matrix!!";return ERROR;}
if(M.mu!=N.mu||M.nu!=N.nu){cout<<"-----Cannot calculate!!"<<endl;return ERROR;}
while(p<=M.tu&&q<=N.tu)
{if(M.data[p].i<N.data[q].i)
{Q.data[k].i=M.data[p].i;
Q.data[k].j=M.data[p].j;
Q.data[k].e=M.data[p].e;
k++;p++;}
else if(M.data[p].i>N.data[q].i)
{Q.data[k].i=N.data[q].i;
Q.data[k].j=N.data[q].j;
Q.data[k].e=N.data[q].e;
k++;q++;}
else if(M.data[p].j<N.data[q].j)
{Q.data[k].i=M.data[p].i;
Q.data[k].j=M.data[p].j;
Q.data[k].e=M.data[p].e;
k++;p++;}
else if(M.data[p].j>N.data[q].j)
{Q.data[k].i=N.data[q].i;
Q.data[k].j=N.data[q].j;
Q.data[k].e=N.data[q].e;
k++;q++;}
else {if(N.data[q].e+M.data[p].e==0){p++;q++;}
else {Q.data[k].i=N.data[q].i;
Q.data[k].j=N.data[q].j;
Q.data[k].e=N.data[q].e+M.data[p].e;
k++;p++;q++;}
}
}
while(p<=M.tu)
{Q.data[k].i=M.data[p].i;
Q.data[k].j=M.data[p].j;
Q.data[k].e=M.data[p].e;
k++;p++;}
while(q<=N.tu)
{Q.data[k].i=N.data[q].i;
Q.data[k].j=N.data[q].j;
Q.data[k].e=N.data[q].e;
k++;q++;}
Q.mu=M.mu;Q.nu=M.nu;Q.tu=k-1;
cout<<"-----Addition succeed!!"<<endl;
return OK;
}
/*主函数*/
int main()
{RLSM M,N,T;
int K;
cout<<"请输入矩阵M的mu,nu,tu:"<<endl;
cin>>M.mu>>M.nu>>M.tu;
cout<<"请输入矩阵中的元素:"<<endl;
for(K=1;K<=M.tu;K++)
{
cin>>M.data[K].i>>M.data[K].j>>M.data[K].e;
} /*先建立稀疏矩阵M*/
cout<<"矩阵:"<<endl;
show(M);
deleteM(M);
cout<<"删除元素后的矩阵:"<<endl;
show(M);
insertM(M);
cout<<"插入元素后的矩阵:"<<endl;
show(M);
cout<<"M的转置矩阵:"<<endl;
TSM(M,N);
show(N);
cout<<"N和M的和矩阵:"<<endl;
if(Add(M,N,T))
show(T);
else cout<<"error"<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -