您的位置:首页 > 理论基础 > 数据结构算法

day01-java数据结构之稀疏数组

2020-07-12 17:35 260 查看

先简单介绍下稀疏数组吧

--->当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方法是:

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

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

用经典的例题来解说下:

   (注:我是在b站跟尚硅谷韩顺平老师学的数据结构,他讲的很好通俗易懂,强烈推荐给小白!当然这里面的一些资料也是尚硅谷的,若有侵权就删。)

得说下稀疏数组的格式:row   col   value   这三列   至于行是看二维数组的有效数据来的  一般是二维数组中有效数据+1便是稀疏数组中的行

其目标就是将一个11*11的二维数组转换成稀疏数组,再将稀疏数组转换为二维数组!

下面就是我自己写的代码(初学也是跟着老师敲的):

1.创建一个11*11的二维数组,用0来表示没有数据部分,1表示黑子,2表示蓝子,给二维数组有效位赋值,并用增强for来遍历。

2.在得到二维数组的情况下我们可能不知道数组的有效数据有多少个,所以要遍历数组了,并且可以用count来统计数组内有效数据的个数。

3.创建对应的稀疏数组,并且遍历二维数组,将有效数据赋值给稀疏数组(有一个计数器的小问题,详细见代码注释。)

4.遍历稀疏数组并且格式化打印出来。

[code]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输出下数组
System.out.println("原始的二维数组!");
for(int [] row:chessArr1){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}

// 第二步  遍历二维数组
int count = 0;
for (int i = 0; i < 11; i++) {
for(int j =0;j<11;j++){
if(chessArr1[i][j] != 0){
count++;
}
}

}
// 验证二维数组中非0数据个数
System.out.printf("count="+count);
System.out.println();

// 第三步  创建对应的稀疏数组
int sparseArr[][] = new int[count+1][3];
// 给稀疏数组的第一行第一列复制
sparseArr[0][0]=11;// 因为数组索引是从0开始  所以这里的下标也是从零开始
sparseArr[0][1]=11;
sparseArr[0][2]=count; // 第一行第三列  为二维数组中有效数据个数

// 遍历二维数组  将二维数组中的非0数据赋给稀疏数组
// 定义一个计数器,当二维数组中第一次出现非零的数可以执行
int  counterregister = 0;
for (int i = 0; i < 11; i++) {
for(int j =0;j<11;j++){
if(chessArr1[i][j] != 0){
counterregister++;
sparseArr[counterregister][0]=i;
sparseArr[counterregister][1]=j;
sparseArr[counterregister][2]=chessArr1[i][j];

}
}
}
System.out.println("新的稀疏数组为~~~~~~");
// 第四步  遍历稀疏数组并打印出来
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}

}

}

(这里我就先写下二维数组怎么转稀疏数组啦,稀疏数组转二维数组就留给有兴趣的朋友研究吧。)

很棒的视频出处:https://www.bilibili.com/video/BV1E4411H73v?p=9

欢迎大家一起交流!祝大家早日走向人生巅峰!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: