(1)将大小为n*n的上三角数组转换成以行为主的一维数组,且不存储内容为0的元素!
data[i][j]的位置=[n+(n-i+1)]*i/2+(j-i)
(2)将大小为n*n的上三角数组转换成以列为主的一维数组,且不存储内容为0的元素!
data[i][j]的位置=j*(j+1)/2+i
(1)
#include <iostream>
#include <iomanip>
using namespace std;
int Upper[5][5]={
3,9,1,4,7,
0,5,2,5,8,
0,0,5,2,4,
0,0,0,1,7,
0,0,0,0,9
};
int main()
{
int RowMajor[15];
int Index,i,j;
cout<<"原上三角数组:\n";
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
cout<<setw(3)<<Upper[i][j];
cout<<endl;
}
//进行以行为主的数组数据转换
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i<=j)
{
Index=(11-i)*i/2+(j-i);
RowMajor[Index]=Upper[i][j];
}
cout<<endl;
cout<<"转换成以行为主的一维数组:\n";
for(i=0;i<15;i++)
cout<<setw(3)<<RowMajor[i];
cout<<"\n\n";
return 0;
}
(2)
#include <iostream>
#include <iomanip>
using namespace std;
int Upper[5][5]={
3,9,1,4,7,
0,5,2,5,8,
0,0,5,2,4,
0,0,0,1,7,
0,0,0,0,9
};
int main()
{
int ColMajor[15];
int Index,i,j;
cout<<"原上三角数组:\n";
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
cout<<setw(3)<<Upper[i][j];
cout<<endl;
}
//进行以列为主的数组数据转换
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i<=j)
{
Index=j*(j+1)/2+i;
ColMajor[Index]=Upper[i][j];
}
cout<<endl;
cout<<"转换成以列为主的一维数组:\n";
for(i=0;i<15;i++)
cout<<setw(3)<<ColMajor[i];
cout<<"\n\n";
return 0;
}