• java数据结构之稀疏数组


    1. package shujujiegou;
    2. @SuppressWarnings("all")
    3. public class xishushuzu1 {
    4. public static void main(String[] args) {

    /* 二维数组转稀疏数组的思路
      1.遍历原始的二维数组,得到有效数据的个数sum
      2.根据sum就可以创建稀疏数组sparseArrint[sum+1][3]
      3.将二维数组的有效数据数据存入到稀疏数组
      */
      //先创建原始的二维数组11*11
      //0,没有棋子,1表示黑子 ,3表示蓝子

    1. int chessArr1[][]=new int[11][11];
    2. chessArr1[1][2]=1;
    3. chessArr1[2][3]=2;
    4. chessArr1[6][2]=2;
    5. System.out.println("-----------------------------------------");
    6. /**输出原始的二维数组*/
    7. System.out.println("----->原始的二维数组<------");
    8. for (int[] row:chessArr1){
    9. for (int data:row){
    10. System.out.print(data+"\t");
    11. }
    12. System.out.println();//换行
    13. }
    14. System.out.println("-----------------------------------------");

    //将二维数组转换成稀疏数组的思想
    //1.先遍历二维数组得到非零数据的个数

    1. int sum=0;
    2. for (int i = 0; i <11 ; i++) {
    3. for (int j = 0; j <11 ; j++) {
    4. if(chessArr1[i][j]!=0){
    5. sum++;
    6. }
    7. }
    8. }
    9. System.out.println("二维数组得到非零数据的个数:"+sum);
    10. System.out.println("-----------------------------------------");

    //2.创建对应的稀疏数组

    1. int sparseArr[][] = new int[sum+1][3];
    2. //稀疏数组赋值
    3. sparseArr[0][0]=11;
    4. sparseArr[0][1]=11;
    5. sparseArr[0][2]=sum;

    //遍历二维数组,将非0的值存放到sparseArr中
    //计数器

    1. int count=0;//count 用于记录是几个非零数据
    2. for (int i = 0; i <11 ; i++) {
    3. for (int j = 0; j <11 ; j++) {
    4. if(chessArr1[i][j]!=0){
    5. count++;
    6. sparseArr[count][0]=i;
    7. sparseArr[count][1]=j;
    8. sparseArr[count][2]=chessArr1[i][j];
    9. }
    10. }
    11. }

       //输出稀疏数组的形式

    1. System.out.println("得到的稀疏数组-----------------------------");
    2. for (int i = 0; i < sparseArr.length; i++) {
    3. System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
    4. }
    5. System.out.println("-----------------------------------------");

    /*
    稀疏数组转原始的二维数组的思路
    1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2=int[11][11]
    2.在读取稀疏数组后几行的数据,并赋给原始的二维数组即可.
    */
    //1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维组

      int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];

    //2.在读取稀疏数组后几行的数据(从第二行开始),并赋给原始的二维数组即可.

    1. for(int i = 1;i
    2. chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
    3. }

    //输出恢复后的二维数组

    1. System.out.println("恢复后的二数组");
    2. for (int[] row:chessArr2){
    3. for (int data:row){
    4. System.out.print(data+"\t");
    5. }
    6. System.out.println();//换行
    7. }
    8. System.out.println("-----------------------------------------");
    9. }
    10. }

     

  • 相关阅读:
    关于vue中image控件,onload事件里,event.target 为null的奇怪问题探讨
    Python学习:lambda,sort,filter,map,递归函数的运用
    SpringBoot拦截器和动态代理有什么区别?
    springboot json在线转换为实体类
    基于微调技术打造自己的私有LLM大模型
    A. Trust Nobody
    自动控制原理7.2---信号的采样与保持
    Windows配置Redis远程访问
    记一次导入下载好的源码工程到本地工程异常解决方案
    推荐一款WPF绘图插件OxyPlot
  • 原文地址:https://blog.csdn.net/qq_62779007/article/details/126768906