稀疏数组的简单代码实现

package suanfa1;


import java.io.*;

/*稀疏数组*/
public class ArrayList {

    public static void main(String[] args)  {

        int arr1[][]=new int[11][11];
        arr1[1][2]=5;
        arr1[2][3]=7;
        arr1[5][5]=25;

/*

        for (int[] a:arr1) {
            for (int b:a) {
                System.out.print(b+"\t");
            } System.out.println();
        }
*/

int sum=0;
//计算出二维数组不为零的个数
        for (int[] a:arr1) {
            for (int b:a) {
              if (b!=0){
                  sum++;
              }
            }
        }

        //设置稀疏数组的第一行的值即数组大小和不为零个数 (sum+1)为行数
        int sparseArray[][]=new int[sum+1][3];
        sparseArray[0][0]=11;
        sparseArray[0][1]=11;
        sparseArray[0][2]=sum;


    /*    for (int a[]:sparseArray){
            for (int b:a){
                System.out.print(b+"\t");
            }
            System.out.println();
        }*/

//设置稀疏数组每行记录的值
        int count=0;
        for (int i=0;i<arr1.length;i++){
            for (int j=0;j<arr1.length;j++){
                if (arr1[i][j]!=0){
                    count++;
                    sparseArray[count][0]=i;//稀疏数组1行0列设置为 非零数的行数
                    sparseArray[count][1]=j;//列数
                    sparseArray[count][2]=arr1[i][j];//值
                }
            }
        }
        //foreach循环输出稀疏数组的列表
        for (int a[]:sparseArray){
            for (int b:a){
                System.out.print(b+"\t");
            }
            System.out.println();
        }
        //恢复原来的数组 长度为稀疏数组的第一行
        int r[][]=new int[sparseArray[0][0]][sparseArray[0][1]];
       //为数组恢复原来的值第1行0列是行数,1行1列是列数,1行2列是值
        for (int i=1;i<=sum;i++){
            r[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
        }
        for (int a[]:r){
            for (int b:a
                 ) {
                System.out.print(b+"\t");
            }
            System.out.println();
        }



        }



    }

猜你喜欢

转载自blog.csdn.net/qq_41556688/article/details/112491672
今日推荐