稀疏数组、队列、链表
稀疏数组和队列
-
稀疏数组的处理方法
-
记录数组一共有几行几列,有多少个不同的值
-
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
-
二维数组装稀疏数组的思路
-
遍历原始的二位数组,得到有效数据的个数sum
-
根据sum创建稀疏数组sparseArr int[sum + 1] [3]
-
将二维数组的有效数据存入到稀疏数组
-
-
稀疏数组转原始二维数组的思路
-
先读取稀疏数组的第一行,根据第一行的数据,创建原始的二位数组
-
再读取稀疏数组后几行的数据,并赋给原始的二维数组即可
-
-
代码实现
public class SparseArray {
public static void main(String[] args) throws Exception {
int arr[][] = new int[11][11];
arr[1][2] = 2;
arr[2][3] = 1;
for (int[] ints : arr) {
for (int item : ints) {
System.out.print(item + "\t");
}
System.out.println();
}
//将二维数组转换为稀疏数组
int sum = 0; //用来计算有效个数
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (arr[i][j] != 0) {
sum++;
}
}
}
//创建稀疏数组
int spar[][] = new int[sum+1][3];
spar[0][0] = 11;
spar[0][1] = 11;
spar[0][2] = sum;
//计数器,计算查到第几个非0数据
int count = 0;
for (int i = 0;i<11;i++) {
for (int j = 0;j<11;j++) {
if(arr[i][j]!=0){
count++;
spar[count][0] = i;
spar[count][1] = j;
spar[count][2] = arr[i][j];
}
}
}
for (int[] ints : spar) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//C:\Users\zxy\Desktop\文本文件\test
String filePath = "C:\\Users\\zxy\\Desktop\\文本文件\\test\\map.data";
ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream(filePath));
stream.writeObject(spar);
stream.close();