⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 操作2oooo.cpp

📁 三元组表 跟大家一起分享
💻 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 + -