稀疏数组
稀疏数组
定义
我们所见的数组并不都是被有效数字填充的,有的是只有少部分是有效数字的数组,而这种数组被定义为稀疏数组;
有效数字:有效数字是在一组存在大量相同数据数组中与众不同的那几位;
例子
在五子棋游戏中棋子可以用数字来代替,这样看是不是很像稀疏数组呢(无0,黑1,白2:
那么这样的数组就能被称为稀疏数组,那他应该如何转化成更简单的表现形式呢(如下:
这当然是可以通过代码来实现的!
实现(当然还是分步来啦~!:
- 定义并创建一个稀疏数组:
int[][] arrays = new int[11][11];//声明数组
arrays[1][2] = 1;//填充物
arrays[2][3] = 2;//填充物
- 先遍历数组:
for(int i;i<arrays.lengthi++){
for(int j;j<arrays[i].length;i++){
}
}
- 之后进行判断,发现此时还不能进行压缩数组的创建,所以先计个数,为创建压缩数组做准备(先在循环前进行定义:
int counter = 0;
if(arrays[i][j] != 0){
counter++;
System.out.println("有效数字个数为:"+counter)
}
- 然后创建稀疏数组(因为要搞一个记录稀疏数组具体行,列,有效数字个数的一组,所以需要多加一行:
int[][] a = new int[counter+1][2];
a[0][0] = 11;
a[0][1] = 11;
a[0][2] = counter;
System.out.println(a[0][0]+"\t"+a[0][1]+"\t"+a[0][2]);
- 最后打印稀疏数组(当然还得将稀疏数组行,列等数据赋给压缩数组,这就需要再重复一次循环
int num = 0;
for(int i;i<arrays.lengthi++){
for(int j;j<arrays[i].length;i++){
if(arrays[i][j] != 0){
a[num][0] = i;
a[num][1] = j;
a[num][2] = arrays[i][j];
System.out.println(a[num][0]+"\t"+a[num][1]+"\t"+a[num][2]);
}
}
}
这样就完成啦~整体来看:
public class testDemo01 {
public static void main(String[] args) {
//先进行一个数组创的建:
int[][] arrays = new int[11][11];
arrays[1][2] = 1;
arrays[2][3] = 2;
//遍历数组
int counter = 0;
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
//判断是否为有效数字
if (arrays[i][j] != 0) {
counter++;
}
}
}
System.out.println("有效数字有:"+counter+"个");
//打印压缩:
int[][] a1 = new int[counter + 1][3];
a1[0][0] = 11;
a1[0][1] = 11;
a1[0][2] = counter;
int num = 0;
System.out.println(a1[0][0]+"\t"+a1[0][1]+"\t"+a1[0][2]);
//将压缩数组数据完善:
//遍历数组
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
//判断是否为有效数字
if (arrays[i][j] != 0) {
num++;
a1[num][0] = i;
a1[num][1] = j;
a1[num][2] = arrays[i][j];
System.out.println(a1[num][0]+"\t"+a1[num][1]+"\t"+a1[num][2]);
}
}
}
}
}

浙公网安备 33010602011771号