0
点赞
收藏
分享

微信扫一扫

稀疏数组转换

数组

数据结构分为线性结构和非线性结构
1.线性结构分为顺序存储和链表存储,常见的线性结构有一维数组和链表,队列,栈
2.非线性结构有二维数组,多维数组,广义表,树,表

1.一维数组是顺序存储结构,在内存中的地址是连续的,链表是通过指针进行连接,地址不连续

二维数组转换成稀疏数组

package com.scholar;

import static javafx.scene.input.KeyCode.I;
import static javafx.scene.input.KeyCode.SOFTKEY_0;

/**
 * //@auther huhuho
 * //@date 2022/4/25 11:31
 */
public class Array {
    public static void main(String[] args) {
        //new一个二维数组,int型的
        int count=0;//有效值个数
        int sum=0;//有效值
        //int array1[][] = new int[11][11]和int[][] array1 = new int[11][11]没区别,看自己喜好
        int array1[][] = new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
//输出原始数组
        System.out.println("这是原始数组");
       for (int[] row:array1){
           for (int data:row){
               System.out.printf("%d\t",data);//将数组的值遍历输出,直接输出数组会报[I@1b6d3586,I代表是int型,b6d3586是哈希值
           }
           System.out.println();
       }

//       得到有效值个数
        System.out.println("有效值个数");
       for (int i=0;i<11;i++){
           for (int j=0;j<11;j++){
               if (array1[i][j]!=0){
                  count++;
               }
           }
       }
        System.out.println(count);
//输出稀疏数组
        System.out.println("这是稀疏数组");
        int sparseArr[][]=new int[count+1][3];//稀疏数组的行列数,count+1是因为第二行开始才是有效值
        //对稀疏数组第一行进行赋值
       sparseArr[0][0]=11;
       sparseArr[0][1]=11;
       sparseArr[0][2]=count;
        for (int i=0;i<11;i++){
            for (int j=0;j<11;j++){
                if (array1[i][j]!=0){
                    //遍历数组中所有的数,并对值不为0的值赋给 sparseArr
                    sum++;
                    sparseArr[sum][0]=i;//赋值行
                    sparseArr[sum][1]=j;//赋值列
                    sparseArr[sum][2]=array1[i][j];//赋值value
                }
            }
        }
        for (int[] row:sparseArr){
            for (int data:row){
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }
//读取稀疏数组第一行的数,生成array2
        int array2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
//        有效值的行数开始值i为1,将sparseArr的值赋给array2,这里是将sparseArr的第一列作为array2的横坐标,第二列作为纵坐标
        for (int i=1;i<sparseArr.length;i++){
            array2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
        }

        System.out.println("稀疏数组还原成原始数组");
        for (int[] row:array2){
            for (int data:row){
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }
    }
}

print:不换行输出

println:换行输出

printf:格式化输出,%d是以十进制输出,\t相当于空格,\n相当于换行

举报

相关推荐

数组-稀疏数组

稀疏数组

稀疏数组代码

java稀疏数组

稀疏数组学习

初学稀疏数组

Java 稀疏数组

0 条评论