线性结构(顺序存储和线性储存):数组、队列、链表和栈
非线性结构:二维数组、多维数组、广义表、树结构和图结构
稀疏数组:当一个数组大部分是0,或者为同一个值的数组时,可以用稀疏数组来保存该数组。
稀疏数组的处理方法:
1)记录数组一共几行几列,有多少个不同的值;
2)把具有不同值的元素的行列及数值记录在一个小规模的数组中,从而缩小程序的规模。
应用场景:
举例说明:
稀疏数组的转换思路
1)二维数组转稀疏数组的思路
1.遍历原始的二维数组,得到有效数据的个数sum;
2.根据sum创建稀疏数组 sparseArr int[sum+1][3];
3.将二维数组的有效数据存入到稀疏数组。
2)将稀疏数组转原始的二维数组
1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组;
2.再读取稀疏数组后几行的数据,并赋值给原始的二维数组。
代码实现:
package sparse_array;
public class SparseArray {
public static void main(String[] args) {
//创建原始二维数组 11*11
//0表示没有棋子;1表示黑子;2表示蓝子
int[][] chessArray = new int[11][11];
chessArray[1][2] = 1;
chessArray[2][3] = 2;
//输出原始的二维数组
System.out.println("原始二维数组:");
for (int[] row:chessArray) {
for (int data:row){
System.out.printf("%dt",data);
}
System.out.println();
}
System.out.println();
//1.遍历原始的二维数组,得到有效数据的个数sum;
int sum = 0;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray[0].length; j++) {
if (chessArray[i][j] != 0)
sum++;
}
}
System.out.println("非0数值个数:"+sum);
System.out.println();
// 2.根据sum创建稀疏数组 sparseArr int[sum+1][3];
int[][] sparseArray = new int[sum+1][3];
// 3.将二维数组的有效数据存入到稀疏数组。
sparseArray[0][0] = chessArray.length;
sparseArray[0][1] = chessArray[0].length;
sparseArray[0][2] = sum;
int row = 1;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray[0].length; j++) {
if (chessArray[i][j] != 0){
sparseArray[row][0] = i;
sparseArray[row][1] = j;
sparseArray[row][2] = chessArray[i][j];
row++;
}
}
}
//输出稀疏数组
System.out.println("稀疏数组:");
for (int i = 0; i < sparseArray.length; i++) {
for (int j = 0; j < sparseArray[0].length; j++) {
System.out.printf("%dt",sparseArray[i][j]);
}
System.out.println();
}
System.out.println();
//1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组;
int[][] chessArray2 = new int[sparseArray[0][0]][sparseArray[0][1]];
// 2.再读取稀疏数组后几行的数据,并赋值给原始的二维数组。
for (int i = 1; i < sparseArray.length; i++) {
chessArray2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
//输出原始数组
System.out.println("恢复的原始二维数组:");
for (int[] row2:chessArray2) {
for (int data:row2){
System.out.printf("%dt",data);
}
System.out.println();
}
}
}



