稀疏数组
基本内容
- 定义:一个简化记录方式的二维数组。
- 目的:由于部分二维数组的相同元素较多,占用空间过大,使用稀疏数组来存放可以节省空间。
- 实现方式:在稀疏数组的第一行存放原二维数组的基本信息(共计几行几列几个特别元素),后面的逐一存放特别元素的行列数和元素值。有如三维坐标系,存放的是坐标,x、y、z分别代表行数、列数、数值
- 引入项目:五子棋项目。
代码实现
下面使用Java来实现将一个基本二维数组转化为稀疏数组,再将稀疏数组还原为一个基本二维数组。从中体现稀疏数组的作用和使用方式。
首先建立一个12*12的基本二维数组并存入一些元素
1 int[][] arr1=new int[11][11]; 2 arr1[1][2]=1; 3 arr1[2][3]=2; 4 arr1[4][5]=2;
遍历输出数组看一下
1 for(int[] temp:arr1){ 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
下面遍历基本数组,得到基本数组的基本信息(非零元素总数)
int sum=0;//元素总数 for(int i=0;i<11;i++) { for(int j=0;j<11;j++) { if(arr1[i][j]==0) { continue; }else { sum++; }
}
}
创建稀疏数组并存入基本信息
1 int[][] sparseArr=new int[sum+1][3]; 2 sparseArr[0][0]=11; 3 sparseArr[0][1]=11; 4 sparseArr[0][2]=sum;
遍历存入非零元素
1 int hang=0; 2 int lie=0; 3 for(int i=0;i<11;i++) { 4 for(int j=0;j<11;j++) { 5 if(arr1[i][j]==0) { 6 continue; 7 }else { 8 hang++; 9 sparseArr[hang][lie]=i; 10 sparseArr[hang][lie+1]=j; 11 sparseArr[hang][lie+2]=arr1[i][j]; 12 } 13 } 14 }
打印一下填充好的稀疏数组看看效果
1 for(int[] temp:sparseArr) { 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
11 11 3 1 2 1 2 3 2 4 5 2
可以看出第一行存放着基本数据,行数、列数、需要存放的元素数
后三行存放着形式为(行数、列数、元素值)的的三组数据
接下来将稀疏数组转化为二维基本数组
创建二维数组,代入基本数据,遍历输入特定位置的元素
1 int[][] arr2=new int [sparseArr[0][0]][sparseArr[0][1]]; 2 for(int i=1;i<hang+1;i++) { 3 arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 4 }
遍历打印基础数组
1 for(int[] temp:arr2) { 2 for(int item:temp) { 3 System.out.print(item+"\t"); 4 } 5 System.out.println(); 6 }
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

浙公网安备 33010602011771号