数据结构与算法之稀疏数组
程序员文章站
2022-07-09 15:45:22
...
数据结构:线性结构和非线性结构
(1)线性结构
数据元素之间存在一对一对的线性关系
细分为有序和链式存储结构
(2)非线性结构
数据元素之间不一定是一对一对的关系
我们今天讲下的稀疏数组也是属于线性结构,稀疏数组的作用是大量的简化了多维数组重复元素,占用过多资源的问题。
二维数组转稀疏数组
(1)遍历数组获取到有效数据个数sum
(2)根据sum创建稀疏数组的大小 new int[sum+1][3]
(3) 将二维数组的有效数据存入到稀疏数组中
稀疏数组转二维数组
(1)先读取稀疏数组的第一行的元素,分别是行,列,总公的有效值,根据信息创建二维数组
(2)在创建后存储在稀疏数组中的有效值
//1 二维数组转稀疏数组
//二维数组
int arr1[][] = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
for (int a[] : arr1) {
for (int arr : a) {
System.out.print("\t" + arr);
}
System.out.println();
}
int sum = 0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] != 0) {
sum++;
}
}
}
//创建稀疏数组
int spararr[][] = new int[sum + 1][3];
spararr[0][0] = arr1.length;
spararr[0][1] = arr1.length;
spararr[0][2] = sum;
int count = 0;
for(int i = 0; i < arr1.length; i++){
for(int j = 0; j < arr1[i].length; j++){
if(arr1[i][j] != 0){
++count;
spararr[count][0] = i;
spararr[count][1] = j;
spararr[count][2] = arr1[i][j];
}
}
}
for(int i = 0; i < spararr.length; i++){
for(int j = 0; j < spararr[i].length; j++){
System.out.print("\t"+spararr[i][j]);
}
System.out.println();
}
//2稀疏数组转二维数组
//创建二维数组并赋值
int chestarr[][] = new int[spararr[0][0]][spararr[0][1]];
for(int i = 1; i < spararr.length; i++){
chestarr[spararr[i][0]][spararr[i][1]] = spararr[i][2];
}
for (int i = 0; i < chestarr.length; i++){
for(int j = 0; j < chestarr[i].length; j++){
System.out.print("\t" + chestarr[i][j]);
}
System.out.println();
}
}