稀疏数组
Posted tanggula-pioneer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稀疏数组相关的知识,希望对你有一定的参考价值。
一、数组有与稀疏数组的含义
array数组:一种聚合数据类型,有限个相同类型的变量所组成的有序集合,且数组中的每一个变量被称为元素。
特点:内存中顺序存储,由一个个连续的内存单元组成的,每一个内存单元都有自己的地址。因此可以很好地实现逻辑上的顺序表,数组有下标,从0开始,因此可以通过下标随机访问元素,且访问下标不能超过数组长度-1。数组中的每一个元素,都存储在小小的内存单元中,并且元素之间紧密排列,既不能打乱元素的存储顺序,也不能跳过某个存储单元进行存储。也因此,易查询,不易更新和删除。
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组保存该数组。
稀疏数组( 压缩特殊的二维或多维数组 )的处理方法是:
1. 记录数组一共有几行几列,有多少个不同的值。
2. 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模----减少内存压力(压缩数组)。
二、稀疏数组的使用场景
三、代码实现
//定义一个原始二维数组
int[][] array = new int[11][11];
//赋值特殊值
array[3][3] = 1;
array[3][4] = 2;
//输出二维数组
for(int[] row : array) {
for(int item : row ) {
System.out.printf("%d ",item);
}
System.out.println();
}
//将二维数组转换为稀疏数组
//先遍历二维数组统计特殊值---二维数组的行和列固定???
int sum = 0 ;
for(int i=0; i<11; i++) {
for(int j=0;j<11; j++) {
if( array[i][j] != 0) {
sum++;
}
}
}
//创建特殊的稀疏数组
int sparseArray[][] = new int[sum+1][3];
sparseArray[0][0] = 11; //总行数
sparseArray[0][1] = 11; //总列数
sparseArray[0][2] = sum; //特殊值总数
//遍历二维数组,将非0的值存放到sparseArray中
int count = 0; //用于记录是第几个非0数
for(int i=0;i<11;i++) {
for(int j=0;j<11;j++) {
if(array[i][j] != 0){
count++;
sparseArray[count][0]=i;
sparseArray[count][1]=j;
sparseArray[count][2]=array[i][j];
}
}
}
System.out.println("即将得到稀疏数组");
//输出稀疏数组
for(int i=0;i<sparseArray.length;i++) {
System.out.printf("%d %d %d
",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
}
//稀疏数组----》二维数组
int[][] newArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for(int i=1; i<sparseArray.length; i++) {
newArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
System.out.println("即将得到恢复二维数组");
//即将恢复二维数组
for(int[] row : newArray ) {
for(int it : row) {
System.out.printf("%d ",it);
}
System.out.println();
}
以上是关于稀疏数组的主要内容,如果未能解决你的问题,请参考以下文章