数据结构day01-稀疏数组

157 阅读2分钟

1.线性结构

1)线性结构作为最常见的数据结构,其特点是数据元素之间存在一对一的线性关系

2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储,顺序存储的线性表称为顺序表,顺序表中的元素是连续的

3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息

4)线性结构常见的有数组、队列、栈和链表

2. 非线性结构

非线性结构包括:二维,多维数组、广义表、树结构、图结构

3. 稀疏数组

当一个数组大部分的元素为0,或者为同一个值的数组时,可以使用系数数组来保存该数组

3.1稀疏数组的处理方式

1)记录数组一共有几行几列,有多少个不同的值(稀疏数组第一行)

2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

3.2稀疏数组的应用场景

使用稀疏数组来保存类似处理方法的二维数组(棋盘,地图)

把稀疏数组存盘 ,并且可以恢复原来的二维数组

3.3二维数组转稀疏数组的思路

1)遍历原始的二维数组,得到有效数据的个数sum

2)根据num就可以创建稀疏数组sparseArr int[sum+1][3]

3)将二维数组的有效数据数据放入到稀疏数组中

3.3稀疏数组转二维数组的思路

1)先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组

2)读取稀疏数组后几行的数组,并赋值给原始的二维数据即可

3.4实现代码

    int[][] arrs = new int[11][11];
    arrs[1][1] = 1;
    arrs[2][2] = 2;
    System.out.println(Arrays.deepToString(arrs));

    //个数
    int sum = 0;
    for (int i = 0; i < arrs.length; i++) {
        for (int j = 0; j < arrs[i].length; j++) {
            if (arrs[i][j] != 0) {
                sum++;
            }
        }
    }
    System.out.println(sum);

    Object[][] sparseArray = new Object[sum + 1][3];
    //行
    sparseArray[0][0] = "row";
    //列
    sparseArray[0][1] = "col";
    //值
    sparseArray[0][2] = "value";

    //取值
    for (int i = 0; i < arrs.length; i++) {
        for (int j = 0; j < arrs[i].length; j++) {
            if (arrs[i][j] != 0) {
				sparseArray[i][0] = i;
				sparseArray[i][1] = j;
				sparseArray[i][2] = arrs[i][j];
            }
        }
    }

    System.out.println(Arrays.deepToString(sparseArray));