1. 线性结构与非线性结构
1. 数据结构包括:线性结构和非线性结构
2. 线性结构
(1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系
(2)线性结构中有两种不同的存储结构:顺序存储结构(数组)、链式存储结构(链表)
- 顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的
- 链式存储的线性表称为链表,链表中存储的元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
(3)线性结构常见的有:数组、队列、链表、栈
3. 非线性结构:非线性结构包括:二维数组、多维数组、树结构、图结构
2. 稀疏数组(sparsearray)
1. 稀疏数组的实际需求
- 在编写五子棋程序时,使用二维数组代替棋盘
- 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据–>就可以用稀疏数组
2. 稀疏数组的基本介绍
(1)当一个数组中大部分元素是0或者是同一个数时,可以使用稀疏数组来保存该数组
(2)稀疏数组的处理方式
- 记录数组一共有几列几行,有多少个不同值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小数组的规模
3. 应用实例
(1)二维数组转稀疏数组
- 遍历原始的二维数组,得到有效的数据个数sum
- 根据sum创建稀疏数组sparseArr int[sum + 1][3]
- 将二维数组的有效数据存储到稀疏数组
(2)稀疏数组转二维数组
- 先读取稀疏数组的第一行,根据第一行的数据确定二维数组
- 在读取稀疏数组后几行的数据,并赋值给二维数组即可
4. 代码实现
public class SparseArray {
public static void main(String[] args) {
//创建一个原始二维数组11 * 11
//0:没有棋子 1:黑子 2:蓝子
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
//输出原始的二维数组
for (int[] row : chessArr1) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
System.out.println("================================================");
//将二维数组转换成稀疏数组
//1.遍历原始二维数组,先找非0元素的个数
int sum = 0;
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++){
if (chessArr1[i][j] != 0){
sum++;
}
}
}
//2.创建稀疏数组
int sparseArr[][] = new int[sum + 1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//遍历二维数组,将非0的值放到sparseArr中
int count = 0; //用于记录这是第几个非0值
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++){
if (chessArr1[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//输出稀疏数组
for (int[] row : sparseArr) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
System.out.println("================================================");
//3.稀疏数组转化为原始数组
//先读取稀疏数组第一行数据,根据第一行数据,创建原始二维数组
int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
//在读取稀疏数组的几行数据(从第二行开始),并赋值给原始二维数组
for(int i = 1; i < sparseArr.length; i++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//输出恢复后的二维数组
for (int[] row : chessArr2) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
}
}
版权声明:本文为nswzr原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。