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));