#include<iostream>
using namespace std;
const int Max=3;
template <typename T>
struct element{
int rows,cols;
T value;
};
template <typename T>
class xsjz{
int hs,ls,gs;
element<T> data[Max];
public:
xsjz(){hs=ls=gs=0;}
xsjz(int h,int l,int g){
hs=h;ls=l;gs=g;
cout<<"输入非0元素的行、列下标以其元素值\n";
for(int i=0;i<gs;i++){
cin>>data[i].rows>>data[i].cols>>data[i].value;
}}
void Print(){
cout<<"行数:"<<hs<<",列数:"<<ls<<",非0元素个数:"<<gs<<endl;
cout<<"非0元素的行、列下标以其元素值\n";
for(int i=0;i<gs;i++){
cout<<data[i].rows<<"\t"<<data[i].cols<<"\t"<<data[i].value<<endl;
}
}
xsjz<T> zhjz(){
xsjz t;
t.hs=ls;t.ls=hs;t.gs=gs;
int count=0;
for(int i=0;i<ls;i++)
for(int j=0;j<gs;j++)
if(data[j].cols==i){
t.data[count].cols=data[j].rows;
t.data[count].rows=data[j].cols;
t.data[count].value=data[j].value;
count++;
}
return t;
}
};
int main(){
xsjz<int> jz1(4,5,3),jz2;
jz1.Print();
jz2=jz1.zhjz();
jz2.Print();
return 0;
}
总结
1.用三元组结构体来存储每个非零元素的相关信息,包含行,列及其值。
2.定义结构体变量数组data[]来存储并便于访问每个非零元素的信息。
3.转置矩阵用到两个for循环来循环控制把从原列数从下标小到大的进行遍历。外层循环是
将列数从0到最大进行访问。内层循环是遍历每一个非零元素的列数,是否等于外层循环所要找的列数好。