Conversion between two-dimensional arrays and sparse arrays

/*
 * 1.稀疏数组介绍:
 * 如果原数组的非0元素的个数有n个,则稀疏数组有n+1行,列数不变,一共有三列
 * 第一行保存的数据: 原始数组的行   原始数组保存的列   原始数组中非0的元素个数
 * 第二行保存的数据: 第一个非0元素所在的行 第一个非0元素所在的列 第一个非0元素的值
 * ..........
 * 
 * 2.二维数组转化为稀疏数组:
 * 遍历二维数组,求出原始二维数组中非0元素的个数sum
 * 创建稀疏数组a[sum+1][3]
 * 将原始二维数组的非0元素的值存入到稀疏数组中
 * 
 * 3.稀疏数组恢复为原始二维数组
 * 先利用稀疏数组第一行的元素创建一个二维数组
 * 将稀疏数组后n-1行的元素赋值给新创建的二维数组
 * 
 */
public class SparseArray {
    
    
	public static void main(String[] args) {
    
    
		//1.创建一个原始的二维数组
		int [][]array=new int[6][6];
		array[1][2]=1;
		array[2][1]=2;
		System.out.println("原始的二维数组:");
		for(int [] row:array)
		{
    
    
		    for (int elem:row)
		    	System.out.printf("%d ",elem);
		    System.out.println();
		}
		//2.将二维数组转化为稀疏数组
		//2.1求出二维数组中非0元素的个数
		int sum=0;
		for(int [] row:array)
		{
    
    
		    for (int elem:row)
		    	if(elem!=0)
		    		sum++; 	
		}
		//2.2创建一个稀疏数组
		int sparsearray[][]=new int[sum+1][3];
		sparsearray[0][0]=6;//记录行数
		sparsearray[0][1]=6;//记录列数
		sparsearray[0][2]=sum;//记录非0数据的个数
		
		//2.3将原始数组中的非0元素保存到稀疏数组中
		int count=0;//当前是第几个非0元素
		for(int i=0;i<array.length;i++)
		{
    
    
			for(int j=0;j<array[i].length;j++)
			{
    
    
			   if(array[i][j]!=0)
			   {
    
    
				   count++;
				   sparsearray[count][0]=i;
				   sparsearray[count][1]=j;
				   sparsearray[count][2]=array[i][j];
			   }
			}
		
		}
		//3.输出稀疏数组
		System.out.println("稀疏数组元素如下:");

		for(int i=0;i<sparsearray.length;i++)
		{
    
    
		      System.out.println(sparsearray[i][0]+" "+sparsearray[i][1]+" "+sparsearray[i][2]);
		}
		
		//4.恢复二维数组
		int recoverArray[][]=new int[sparsearray[0][0]][sparsearray[0][1]];
		for(int i=1;i<sparsearray.length;i++)
		{
    
        
			int row=sparsearray[i][0];
			int line=sparsearray[i][1];
			int value=sparsearray[i][2];
			recoverArray[row][line]=value;
		}
		System.out.println("恢复后的二维数组:");
		for(int [] row:array)
		{
    
    
		    for (int elem:row)
		    	System.out.printf("%d ",elem);
		    System.out.println();
		}
		
	}

}

Insert picture description here

Guess you like

Origin blog.csdn.net/qq_43478694/article/details/107716568