关于稀疏数组
作者:互联网
一、为什么用稀疏数组?
比如这个棋盘,如果要记录黑蓝棋子的位置首先会想到运用二维数组,我们把二维数组建好后(1是黑,2是蓝),发现很多空白位置浪费了大量的内存空间
我们这个时候可以用稀疏数组来存储“有效数据”
二、怎么使用稀疏数组
稀疏数组一共有三列(列固定),分别表示行号,列号和值
第一行:记录初始数组的行、列、有效值(有意义的值)
其他行:逐次记录有效值的行号、列号和值
由图可知,稀疏数组总行数为有效值(假设有效值为num)num+1,列数为3
三、代码实现
数组转稀疏思路:
- 先定义好一个数组,并赋值
- 遍历数组,获取有效值个数num
- 定义稀疏数组,行数为num+1,列数为3,为数组第一行赋值
- 再次遍历初始数组,获取有效值,赋值给稀疏数组
- 定义完成
稀疏数组转二维数组:
- 定义二维数组,行和列从稀疏数组第一行读取
- 设置循环,根据稀疏数组后几行来恢复
代码:
1 int[][] array1=new int[11][11]; 2 //为数组赋值,1是黑色,2是蓝色 3 array1[1][2]=1; 4 array1[2][3]=2; 5 //遍历数组 6 for (int[] row:array1) { 7 for (int item:row) { 8 System.out.print(item+"\t"); 9 } 10 System.out.println(); 11 } 12 int num=0; 13 //再次遍历数组,找出实际存在的数有几个 14 for (int i=0;i<11;i++){ 15 for (int j=0;j<11;j++){ 16 if (array1[i][j]!=0){ 17 num++; 18 } 19 } 20 } 21 System.out.println("num="+num); 22 23 //开始定义稀疏数组 24 int[][] Sparse_array=new int[num+1][3]; 25 Sparse_array[0][0]=11; 26 Sparse_array[0][1]=11; 27 Sparse_array[0][2]=num; 28 29 //再次遍历为稀疏数组赋值 30 int count=0; 31 for (int i=0;i<11;i++){ 32 for (int j=0;j<11;j++){ 33 if (array1[i][j]!=0){ 34 count++; 35 Sparse_array[count][0]=i; 36 Sparse_array[count][1]=j; 37 Sparse_array[count][2]=array1[i][j]; 38 } 39 } 40 } 41 42 //输出稀疏数组 43 System.out.println("+++++++++++++++++++++稀疏数组++++++++++++++"); 44 for (int i=0;i<Sparse_array.length;i++){ 45 System.out.printf("%d\t%d\t%d\t\n",Sparse_array[i][0],Sparse_array[i][1],Sparse_array[i][2]); 46 } 47 System.out.println(); 48 49 //稀疏数组恢复 50 int[][] array2=new int[Sparse_array[0][0]][Sparse_array[0][1]]; 51 //为稀疏数组循环并赋值 52 for (int i=1;i<Sparse_array.length;i++){ 53 array2[Sparse_array[i][0]][Sparse_array[i][1]]=Sparse_array[i][2]; 54 } 55 56 //显示恢复的数组 57 System.out.println("++++++++++++++++++恢复的数组+++++++++++++++"); 58 for (int[] row:array2){ 59 for (int item:row){ 60 System.out.printf(item+"\t"); 61 } 62 System.out.println(); 63 } 64 65
关于为稀疏数组赋值理解:
count++; Sparse_array[count][0]=i; Sparse_array[count][1]=j; Sparse_array[count][2]=array1[i][j];
为什么用count?
我们是用循环逐行赋值的,为一行赋值时,只有列会变,所以定义一个count锁定行
文章是看完尚学堂的韩顺平老师稀疏数组的课后写的,写下来希望加强下记忆
标签:count,有效值,int,稀疏,关于,数组,赋值 来源: https://www.cnblogs.com/han200113/p/11515327.html