二维数组:求某一元素在数组中的位置。
1、以行为主:
data[i][j]的内存位置=第一个元素的位置+[ (i * 每一行元素个数)+j ] * ( 数据类型所占空间大小)
2、以列为主:
data[i][j]的内存位置=第一个元素的位置+[ (j * 每一行元素个数)+i ] * ( 数据类型所占空间大小)
如:int data[ 5 ] [ 4 ]、 arr[ 20 ]
则 以行为主:data[ i ] [ j ] = arr[ i * 4 + j ];
以列为主:data[ i ] [ j ] = arr[ j * 5 + i ];
稀疏数组:指数组中大部分的内容值都未被使用(或都为0),仅有少部分的空间被使用,因此造成内存空间浪费,为了节省内存空间,先用一种压缩的 方式来表示稀疏数组的内容!
#include <iostream>
#include <iomanip>
using namespace std;
int Data[9][7]={{0},{0,3},{0},{1,4},{0,0,7},{0,0,0,0,0,5},{0},{0}};
int main()
{
int i,j,Index=0; //Index为压缩数组的索引值
int CompressData[10][3]; //存储压缩后数据的数组
cout<<"压缩前的数组:\n";
for(i=0;i<9;i++)
{
for(j=0;j<7;j++)
cout<<setw(3)<<Data[i][j];
cout<<endl;
}
//进行数组数据压缩
for(i=0;i<9;i++)
for(j=0;j<7;j++)
if(Data[i][j]!=0)
{
Index++; //增加数组索引值,从1开始
CompressData[Index][0]=i; //记录元素的行位置
CompressData[Index][1]=j; //记录元素的列位置
CompressData[Index][2]=Data[i][j]; //存储原数组的有效元素
}
CompressData[0][0]=9; //原数组的行数
CompressData[0][1]=7; //原数组的列数
CompressData[0][2]=Index; //使用的元素个数
cout<<"\n压缩后的数组为:\n";
for(i=0;i<=Index;i++)
{
for(j=0;j<3;j++)
cout<<setw(3)<<CompressData[i][j];
cout<<endl;
}
cout<<endl;
return 0;
}