**
数据结构
**
稀疏数组意义:
如果二维数组中含有许多的0或者相同的数字,此时我们就可以使用稀疏数组进行存储,可以减少对磁盘的消耗。使得磁盘可以存储更多的其他的东西
稀疏数组的定义
稀疏数组一共含有3列分别用于存储行值,列值和存在值,稀疏数组的第一行用于存储二维数组的行、列和一共有几个非零数(或与(大多数相同数)不同的数),从第二行开始存储非零数的行、列和该值。
如图所示
稀疏数组的实现
(1)首先得出非零数的个数,记作sum
(2)建立稀疏数组;
int[][] array = new int[sum+1][3];
(2)得出非零数的位置,添加到稀疏数组中
稀疏数组的代码实现(Java)
public class SparseArray {
public static void main(String[] args) {
//创建一个原始二维数组
//0:表示没有棋子 1:表示白子 2:表示黑子
int array[][] = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
/**
* 将二维数组转换为稀疏数组
* 1.遍历二维数组,得出非零的数的个数
* 2.创建稀疏数组
* 3.遍历二维数组,将二维数组中不是0的值存入到稀疏数组中
*/
int temp = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0;j < array[i].length;j++){
if(array[i][j] != 0){
temp++;
}
}
}
int sparse[][] = new int[temp + 1][3];
sparse[0][0] = 11;
sparse[0][1] = 11;
sparse[0][2] = temp;
int count = 0;
for (int i = 1;i < array.length;i++){
for (int j = 0;j < array[i].length;j++){
if(array[i][j] != 0) {
count++;
sparse[count][0] = i;
sparse[count][1] = j;
sparse[count][2] = array[i][j];
}
}
}
System.out.println("稀疏数组~~~~~");
for (int i = 0;i < sparse.length;i++){
for (int j= 0;j < sparse[i].length;j++){
System.out.print(sparse[i][j] + " ");
}
System.out.println();
}
}}