稀疏矩阵转置以及输出

稀疏矩阵转置以及输出

代码实现:
1.稀疏矩阵的输入
2.稀疏矩阵转三元组
3.转置
4.三元组转稀疏矩阵

#include<iostream.h>
#include<stdio.h>
#define MAXSIZE 10000
typedef int ElemType;
typedef int Status;
#define M1 4
#define N1 4
typedef struct{  //三元组
	int row;     //行
	int line;	 //列
	ElemType elem;   //元素大小
}triple;
typedef struct{  //矩阵
	triple data[MAXSIZE];
	int rownum;    //行数
	int linenum;    //列数
	int elemnum;    //元素总数
}Trix;
void createTrix(Trix &M,ElemType a[M1][N1]){   //创建稀疏矩阵
	M.linenum=N1;
	M.rownum=M1;
	M.elemnum=0;
	for(int i=0;i<M1;i++)
		for(int j=0;j<N1;j++)
			if(a[i][j]!=0)
			{
				M.data[M.elemnum].row=i;
				M.data[M.elemnum].line=j;
				M.data[M.elemnum].elem=a[i][j];
				M.elemnum++;
			}
		cout<<"已将稀疏矩阵转化为三元组"<<endl;
}

void coutTrix(Trix N){      //输出稀疏矩阵
	int k=0;
	if(N.elemnum!=0){
		for(int i=0;i<N.rownum;i++){			//行数
		   for(int j=0;j<N.linenum;j++){		//列数
			   if(N.data[k].line==j&&N.data[k].row==i){   //比较,如果行列相等就输出,没有就输出零
				   cout<<N.data[k].elem<<"  ";
				   k++;
			   }
			   else cout<<0<<"  ";
			}
		   cout<<endl;
		}
	}
	cout<<"稀疏矩阵转化完毕!"<<endl;
}
void coutTriple(Trix M){	//输出三元组
	int num=0;
	cout<<"三元组输出如下"<<endl;
	cout<<"num  row  line  value"<<endl;
	cout<<"---------------------"<<endl;

	for(int i=0;i<M.elemnum;i++){
		cout<<num<<"     "<<M.data[i].row<<"     "<<M.data[i].line<<"     "<<M.data[i].elem<<endl;
		num++;
		}
	cout<<"输出完毕"<<endl;
}
void transTriple(Trix &M,Trix &N){//转置三元组
	int k;
	N.rownum=M.linenum;				//行列互换
	N.linenum=M.rownum;
	N.elemnum=M.elemnum;			//元素个数一样
	if(M.elemnum!=0)
	{
		k=0;
		for(int i=0;i<M.linenum;i++)//N的行数
			for(int j=0;j<M.elemnum;j++)
				if(M.data[j].line==i)
				{
					N.data[k].line=M.data[j].row;
					N.data[k].row=M.data[j].line;
					N.data[k].elem=M.data[j].elem;
					k++;
				}
	}
	cout<<"三元组转置成功"<<endl;
}
void main(){
	Trix M,N;
	int i=0,j=0;
	int row,line;
	cout<<"请输入稀疏矩阵的行数和列数"<<endl;
	cin>>row>>line;
	int a[M1][N1]={0};
	cout<<"请输入稀疏矩阵的元素"<<endl;
	for(i=0;i<row;i++)
		for(j=0;j<line;j++)
			cin>>a[i][j];
	createTrix(M,a);
	coutTriple(M);      //三元组输出方式
	transTriple(M,N);
	coutTriple(N);      //三元组输出方式
	coutTrix(N);        //稀疏矩阵输出方式
}
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值