二维数组转换稀疏数组
0 | 0 | 0 | 0 | row | col | val | |
---|---|---|---|---|---|---|---|
0 | 1 | 0 | 2 | 0 | 3 | 4 | 3 |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 2 |
2 | 2 | 0 | 1 |
1.二维数组转稀疏(sparse)数组的思路:
稀疏数组固定三列,有行,列,值三个属性。第一行存储原二维数组的总行数与列
数。其余几行存储原二维数组数据对应行列及值。稀疏数组行数 = 二维数组所有值
个数+1;
int arr_list[][] = new int[11][11];
arr_list[2][4] = 2;
arr_list[5][2] = 2;
arr_list[6][9] = 8;
int sum = 0;
int count = 0;
//for循环找出二维数组有几个值
for(int arr[]:arr_list){
for(int num:arr){
if (num != 0){
sum++;
}
}
}
//打印原有数组
for(int arr[] : arr_list){
for (int num : arr){
System.out.print("\t"+num);
}
System.out.println();
}
System.out.println("***************************");
//定义稀疏数组
int sparsearr[][] = new int[sum+1][3];
//以下三行初始化稀疏数组第一行的值。(初始化行、列、非0值)
sparsearr[0][0] = arr_list.length;
sparsearr[0][1] = arr_list[0].length;
sparsearr[0][2] = sum;
//向稀疏数组添加值所在行、列及原本值
for(int i = 0 ; i < arr_list.length ; i++ ){
for(int j = 0; j < arr_list[i].length ; j++){
if (arr_list[i][j] != 0){
count++;
sparsearr[count][0] = i;
sparsearr[count][1] = j;
sparsearr[count][2] = arr_list[i][j];
}
}
}
//测试打印稀疏数组
for (int arr[] : sparsearr){
for (int num : arr){
System.out.print("\t"+num);
}
System.out.println();
}
System.out.println("**********************");
//稀疏数组转化二维数组,初始化二维数组长度,获取稀疏数组第一行属性值(行、列)
int arr2[][] = new int[sparsearr[0][0]][sparsearr[0][1]];
//遍历稀疏数组,将稀疏数组里面的值添加到二维数组对应行
for(int i = 1 ; i < sparsearr.length ; i++){
arr2[sparsearr[i][0]][sparsearr[i][1]] = sparsearr[i][2];
}
//打印测试还原的二维数组
for(int arr[] : arr2){
for (int num : arr){
System.out.print("\t"+num);
}
System.out.println();
}
2.数组模拟队列
队列是一个有序列表可以由数组或链表来实现
队列遵循先进先出
使用取模运算