数据结构:矩阵的转置和查找元素

关于C++方面的数据结构中的矩阵转置方面的代

#include<iostream>
using namespace std;

typedef struct{
	int i,j;  //非零元素的行下标和列下标 
	int e;    //非零元素 
}node; 

typedef struct{
	int mu,nu,tu;//矩阵的行数、列数、和非零元素个数 
	node data[10][10];  //行数最大为10,列数最大为10 
}TSMatrix;

bool Creat_Matrix(TSMatrix &a,int Row_num,int Line_num){  //创建矩阵,行数为 Row_num,列数为Line_num
	if(Row_num>10||Line_num>10){
		cout<<"创建失败";
		return false;
	}
	else{
	a.mu=Row_num;a.nu=Line_num; 
	for(int row=1;row<=a.mu;row++){
		for(int line=1;line<=a.nu;line++){
			a.data[row][line].i=row;
			a.data[row][line].j=line;
		}
	}
		return true;
	}

}

void In_Matrix(TSMatrix &a){  //在矩阵中输入元素 
		cout<<"请输入矩阵元素";
		for(int row=1;row<=a.mu;row++){
		for(int line=1;line<=a.nu;line++){
			cin>>a.data[row][line].e;
		}
	}
}

void Out_Matrix(TSMatrix a){  //输出矩阵 
	for(int row=1;row<=a.mu;row++){
		for(int line=1;line<=a.nu;line++){
			cout<<a.data[row][line].e<<" ";
		}
		cout<<endl;
	}
}

void Trans_Matrix(TSMatrix a,TSMatrix &b){  //将a矩阵转置,存储到b矩阵 
	b.mu=a.nu;b.nu=a.mu;
	for(int row=1;row<=a.nu;row++){
		for(int line=1;line<=a.mu;line++){
			b.data[row][line].e=a.data[line][row].e;
			b.data[row][line].i=a.data[line][row].j;	
			b.data[row][line].j=a.data[line][row].i;
		}
	}
}

void Find_Element(int num,TSMatrix a){  //遍历矩阵,在矩阵a中寻找元素num 
	for(int row=1;row<=a.mu;row++){
		for(int line=1;line<=a.nu;line++){
			if(a.data[row][line].e==num){
				cout<<"这个数在第"<<row<<"行"<<"第"<<line<<"列"<<endl; 
			}
		}
	}
}

void Martix_Multiply (TSMatrix a,TSMatrix b,TSMatrix &s){  //矩阵的乘法 
	s.mu=a.mu;s.nu=b.nu;
	for(int i=1;i<=a.mu;i++){
		for(int j=1;j<=b.nu;j++){
			s.data[i][j].e=0;
		for(int k=1;k<=a.nu;k++){
			s.data[i][j].e+=a.data[i][k].e*b.data[k][j].e;
		}
		}
	}
}

int main(){
	TSMatrix a;
	TSMatrix b;
	int row_num,line_num;
	int select; 
	int find;
	cout<<"请输入矩阵的行数和列数";
	cin>>row_num>>line_num;
	if(Creat_Matrix(a,row_num,line_num)==false)return 0;  //判断是否创建矩阵成功,失败就结束程序 
	In_Matrix(a);
	cout<<"矩阵为"<<endl;
	Out_Matrix(a);
	cout<<"转置后的矩阵为"<<endl;
	Creat_Matrix(b,line_num,row_num);
	Trans_Matrix(a,b);
	Out_Matrix(b);
	cout<<"请输入你想在那个矩阵查找矩阵(1为转置前的矩阵,2是转置后的矩阵)";
	cin>>select;
	if(select==1){
		cout<<"请输入你想在要查找的元素:";
		cin>>find;
		Find_Element(find,a);
	}
	if(select==2){
		cout<<"请输入你想在要查找的元素:";
		cin>>find;
		Find_Element(find,b);
	}
	TSMatrix c;
	cout<<"转置矩阵和矩阵相乘后的矩阵为:"<<endl; 
	Martix_Multiply(a,b,c);
	Out_Matrix(c);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值