关于稀疏数组
当一个数组中大部分元素为0时,而该数组又比较大时,可将二维数组转化为稀疏数组保存以达到节省空间的目的
1.稀疏数组的建立
1.记录二维数组的行列,以及不为0的数的行,列和共有多少个这样的数的总和sum;
2.稀疏数组也是一个二维数组,其列包括三行数据:二维数组的行,二维数组的列,二维数组的数
通过二维数组行列,值,可以再次转换为二维数组;
3.稀疏数组第一行保存二维数组的总 行,列,不为0这样的数的总和sum,故列总共有三个元素;
4.从第二行开始保存二维数组的不为0的数的所在行列以及值,所以行数取决于不为0数的多少;
5.表示形式为:sparseArr[sum+1][3];
好,我们开始用代码展示了:
public class 稀疏数组 {
public static void main(String[] args) {
int chessArr[][]=new int[11][11];
chessArr[1][2]=1;
chessArr[2][3]=2;
chessArr[3][4]=1;
System.out.println("原始的二维数组:");
for(int []a:chessArr)
{
for(int date:a)
{
System.out.print(date+"\t");
}
System.out.println();
}
转换为稀疏数组为:
//创建稀疏数组
int sum=0;
for(int []a:chessArr)
{
for(int date:a)
{
if(date!=0)
{
sum++;
}
}
}//获取棋盘中棋子个数
int sparseArr[][]=new int[sum+1][3];//创建稀疏数组
sparseArr[0][0]=chessArr.length;//行
sparseArr[0][1]=chessArr[1].length;//列
sparseArr[0][2]=sum;
int k=1;
//遍历二维数组,将非0元素放入稀疏数组中
for(int i=0;i<chessArr.length;i++)
{
for(int j=0;j<chessArr[i].length;j++)
{
if(chessArr[i][j]!=0)
{
sparseArr[k][0]=i;
sparseArr[k][1]=j;
sparseArr[k][2]=chessArr[i][j];
k++;
}
}
}
显示一下稀疏数组
//显示稀疏数组
System.out.println("行 "+"列 "+" 数 ");
for(int []a:sparseArr)
{
for(int date:a)
{
System.out.print(date+"\t");
}
System.out.println();
}
稀疏数组转化为二维数组
代码展示为:
//稀疏数组转回二维数组
int chess2Arr[][]= new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i=1;i<sparseArr.length;i++)
{
int temp1,temp2;
temp1=sparseArr[i][0];
temp2=sparseArr[i][1];
chess2Arr[temp1][temp2]=sparseArr[i][2];
}
//输出转换后的二维数组
System.out.println("转换之后的二维数组是:");
for(int []a:chess2Arr)
{
for(int date:a)
{
System.out.print(date+"\t");
}
System.out.println();
}
保存到txt文件中
//将两个数组写入txt文件中
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("D:\\shuzhu.txt"));
writer.write("稀疏数组为:\n");
for(int i=0;i<sparseArr.length;i++)
writer.write("\t"+sparseArr[i][0]+"\t"+sparseArr[i][1]+"\t"+sparseArr[i][2]+"\n");
writer.flush();
writer.write("五子棋二维数组为:\n");
for(int i=0;i<chess2Arr.length;i++)
{
for (int j=0;j<chess2Arr[i].length;j++)
{
writer.write("\t"+chess2Arr[i][j]);
}
writer.write("\n");
}
writer.flush();
System.out.println("写入文件成功");
writer.close();
}
catch (Exception e)
{
e.printStackTrace();
}
来看看运行截图吧~~
就到这里吧~~~~~~~拜拜
**by风离**