1.稀疏数组二维结构
行 | 列 | 非0值 |
---|---|---|
4 | 5 | 1 |
3 | 4 | 2 |
2.适用场景
使用与多个重复的地方 , 如棋盘:
3.代码实现
System.out.println("初始数组");
//二维数组大小
int arr[][] = new int[11][11];
//非0值
arr[2][5] = 1;
arr[3][4] = 2;
int count = 0;
//遍历并打印非0值
for (int[] ints : arr) {
for (int anInt : ints) {
if (anInt != 0) {
count++;
}
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("非0的数有:" + count + "个");
System.out.println("二维数组 --> 稀疏数组");
//稀疏数组基本格式
int[][] sparseArray = new int[count + 1][3];
int count1 = 0;
//确定二维数组的基本信息
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = count;
System.out.println(sparseArray[count1][0] + "\t" + sparseArray[count1][1] + "\t" + sparseArray[count1][2] + "\t");
//遍历成稀疏数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (arr[i][j] != 0) {
count1++;
sparseArray[count1][0] = i;
sparseArray[count1][1] = j;
sparseArray[count1][2] = arr[i][j];
System.out.print(sparseArray[count1][0] + "\t" + sparseArray[count1][1] + "\t" + sparseArray[count1][2] + "\t");
System.out.println();
}
}
}
System.out.println("稀疏数组 --> 二维数组");
//利用稀疏数组确定二维数组的大下
int arr2[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
int num = 1;
//遍历 --> 确定非0的位置
for (int i = 1; i < sparseArray.length; i++) {
for (int j = 0; j < sparseArray[0].length; j++) {
arr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
}
//遍历输出
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}