栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

稀疏数组之单向链表存储二维数组(JAVA)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

稀疏数组之单向链表存储二维数组(JAVA)

一、转换原理

         将一个二维数组转换为链式存储,转换后再将其还原,简单原理见下图(结合了本人的理解,画图水平见谅,自己理解理解)。   

     ​​​               

 二、代码结构

        这一部分是代码结构,代表了我写代码的思路,有需要可以看一看。

//随机生成二维数组  

public int[][] twoDimensionalArray(int row, int column){

     //这里返回int[][]二维数组,是因为在下一个方法showValue()中,需要传入一个二维数组。
    }

    //返回二维数组有效值个数并展示二维数组

    public int showValue(int[][] array){

        //这里返回的int代表传入二维数组的有效值个数,在下个方法convertLinkedList()中要  
        //用来确定单向链表的first节点。
        //这个方法实际上是展示数组,顺便计算有效值个数
    }

    //二维数组链式存储

    public List convertLinkedList(int[][] array, int count){

        //这是将数组转换为链表的代码
        //为方便下个方法reduceArray()还原数组,故将链表中的数据存储到列表,并返回这个          //列表。
    }

    //将链表还原为数组

    public int[][] reduceArray(List list){
        //这里是还原数组的代码
        //为了方便展示还原后的数组,返回还原后的二维数组
    }

 三、完整代码

1、SinglyLinkedList类

package com.parseArray.linkedlist;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class SinglyLinkedList {



    
    public int[][] twoDimensionalArray(int row, int column){

        int[][] array = new int[row][column];

        //随机赋值
        Random random = new Random();
        int i = 0;
        while (i <= random.nextInt(row)){
            array[random.nextInt(row - 1)][random.nextInt(column - 1)] = random.nextInt(10);
            i++;
        }

        return array;
    }




    
    public int showValue(int[][] array){

        int count = 0;
        for(int[] arrs: array){
            for(int arr : arrs){
                if (arr != 0){
                    count++;
                }
                System.out.print(arr + "t");
            }
            System.out.println();
        }

        return count;
    }




    
    public List convertLinkedList(int[][] array, int count){

        //定义一个头节点(保存数组基本信息)
        Node first = new Node(array.length,array[0].length,count);

        //定义一个临时节点
        Node temp = first;

        //定义一个列表存储节点数据
        List list = new ArrayList();
        list.add(first);

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0){
                    while (temp.getNext() != null){
                        temp = temp.getNext();
                    }
                    temp.setNext(new Node(i,j,array[i][j]));
                    list.add(temp.getNext());
                    //System.out.println(temp.getNext());
                }
            }
        }

        //显示链表
        temp = first;
        while (true){
            System.out.println(temp);
            if (temp.getNext() != null){
                temp = temp.getNext();
            }else {
                break;
            }
        }
        return list;
    }




    
    public int[][] reduceArray(List list){
        //定义数组
        int[][] array = new int[list.get(0).getRow()][list.get(0).getColumn()];

        //有效值个数
        int count = list.get(0).getValue();

        //遍历链表,给数组赋值
        for (int i = 1; i <= count; i++) {
            array[list.get(i).getRow()][list.get(i).getColumn()] = list.get(i).getValue();
        }
        return array;
    }
}

2、测试代码

package com.parseArray.linkedlist;

import java.util.List;

public class Test {
    public static void main(String[] args) {

        SinglyLinkedList linkedList = new SinglyLinkedList();

        //随机生成一个5行5列的数组
        int[][] array = linkedList.twoDimensionalArray(5,5);


        System.out.println("--------------------二维数组--------------------");
        //计算数组有效值个数,并展示随机生成的数组
        int count = linkedList.showValue(array);


        System.out.println("---------------二维数组转链式存储-----------------");
        //二维数组转链式存储,返回一个列表,接受链表中的数据
        List list = linkedList.convertLinkedList(array,count);


        System.out.println("---------------链式存储转二维数组-----------------");
        //还原数组
        array = linkedList.reduceArray(list);
        //展示数组
        linkedList.showValue(array);
    }
}
四、测试结果

       这是代码的测试结果,测试了几个,也不知道还有没有bug,如果大家在写程序的时候遇到问题,咱们也可以交流一下。


  这是我在书里面看的,和大家分享一下! 

 任何事物如果不是为新时代而生,那么注定会在新时代的压力下分崩离析!


  以上仅供学习参考,可能会有不正确的地方,不过问题应该不大吧,注释是我的想法,表述可能有一点点粗糙,希望可以帮助大家! 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号