稀疏数组

关于稀疏数组

当一个数组中大部分元素为0时,而该数组又比较大时,可将二维数组转化为稀疏数组保存以达到节省空间的目的

1.稀疏数组的建立

1.记录二维数组的行列,以及不为0的数的行,列和共有多少个这样的数的总和sum;
2.稀疏数组也是一个二维数组,其列包括三行数据:二维数组的行,二维数组的列,二维数组的数
通过二维数组行列,值,可以再次转换为二维数组;
3.稀疏数组第一行保存二维数组的总 行,列,不为0这样的数的总和sum,故列总共有三个元素;
4.从第二行开始保存二维数组的不为0的数的所在行列以及值,所以行数取决于不为0数的多少;
5.表示形式为:sparseArr[sum+1][3];
好,我们开始用代码展示了:

public class 稀疏数组 {
    public static void main(String[] args) {
        int chessArr[][]=new int[11][11];
        chessArr[1][2]=1;
        chessArr[2][3]=2;
        chessArr[3][4]=1;
        System.out.println("原始的二维数组:");
        for(int []a:chessArr)
        {
            for(int date:a)
            {
                System.out.print(date+"\t");
            }
            System.out.println();
        }

转换为稀疏数组为:

//创建稀疏数组
        int sum=0;
        for(int []a:chessArr)
        {
            for(int date:a)
            {
                if(date!=0)
                {
                    sum++;
                }
            }
    }//获取棋盘中棋子个数

        int sparseArr[][]=new int[sum+1][3];//创建稀疏数组
        sparseArr[0][0]=chessArr.length;//行
        sparseArr[0][1]=chessArr[1].length;//列
        sparseArr[0][2]=sum;
        int k=1;
//遍历二维数组,将非0元素放入稀疏数组中
      for(int i=0;i<chessArr.length;i++)
      {
          for(int j=0;j<chessArr[i].length;j++)
          {
              if(chessArr[i][j]!=0)
              {
                 sparseArr[k][0]=i;
                 sparseArr[k][1]=j;
                 sparseArr[k][2]=chessArr[i][j];
                 k++;
              }
          }
      }

显示一下稀疏数组

 //显示稀疏数组
        System.out.println("行  "+"列  "+" 数  ");
            for(int []a:sparseArr)
               {
                 for(int date:a)
                 {
                   System.out.print(date+"\t");
                 }
                 System.out.println();
               }

稀疏数组转化为二维数组


代码展示为:

//稀疏数组转回二维数组
        int chess2Arr[][]= new int[sparseArr[0][0]][sparseArr[0][1]];
   for(int i=1;i<sparseArr.length;i++)
     {
        int temp1,temp2;
        temp1=sparseArr[i][0];
        temp2=sparseArr[i][1];
        chess2Arr[temp1][temp2]=sparseArr[i][2];

     }
 //输出转换后的二维数组
        System.out.println("转换之后的二维数组是:");
 for(int []a:chess2Arr)
 {
     for(int date:a)
     {
         System.out.print(date+"\t");
     }
     System.out.println();
 }

保存到txt文件中

//将两个数组写入txt文件中
      try {
          BufferedWriter writer = new BufferedWriter(new FileWriter("D:\\shuzhu.txt"));
          writer.write("稀疏数组为:\n");
          for(int i=0;i<sparseArr.length;i++)
          writer.write("\t"+sparseArr[i][0]+"\t"+sparseArr[i][1]+"\t"+sparseArr[i][2]+"\n");
          writer.flush();
          writer.write("五子棋二维数组为:\n");
          for(int i=0;i<chess2Arr.length;i++)
          {
              for (int j=0;j<chess2Arr[i].length;j++)
              {
                  writer.write("\t"+chess2Arr[i][j]);
              }
              writer.write("\n");
          }
          writer.flush();
          System.out.println("写入文件成功");
          writer.close();
      }
      catch (Exception e)
      {
          e.printStackTrace();
      }

来看看运行截图吧~~

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就到这里吧~~~~~~~拜拜

                                                                                                                                                                              **by风离**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值