中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現將二維數組轉化為鏈式儲存

發布時間:2021-12-17 14:21:38 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

本篇內容介紹了“Java怎么實現將二維數組轉化為鏈式儲存”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

鏈式存儲結構

鏈式存儲結構的線性表將采用一組任意的存儲單元存放線性表中的數據元素。由于不需要按順序存儲,鏈表在插入、刪除數據元素時比順序存儲要快,但是在查找一個節點時則要比順序存儲要慢。

使用鏈式存儲可以克服順序線性表需要預先知道數據大小的缺點,鏈表結構可以充分利用內存空間,實現靈活的內存動態管理。但是鏈式存儲失去了數組隨機存取的特點,同時增加了節點的指針域,空間開銷較大。

下圖就是最簡單最一般的單向鏈表:

Java怎么實現將二維數組轉化為鏈式儲存

代碼思路

將二維數組壓縮成鏈式存儲大體思路與數組壓縮成稀疏數組相似
這里我將鏈表的頭節點儲存二維數組的總行數、列數和有效值個
數 頭結點之后的每個結點存儲有效值的下標和值 轉化思路如下圖所示

Java怎么實現將二維數組轉化為鏈式儲存

代碼實現

創建模擬結點的類 提供構造方法和toString

/**
 * 模擬結點
 */
public class SingleNode {
    /**
     * @row 行號
     * @column 列號
     * @num 值
     */
    public int row;
    public int colunm;
    public int num;
    /**
     *next域:指向下一個結點
     */
    public SingleNode next;

    public SingleNode(int row, int colunm, int num) {
        this.row = row;
        this.colunm = colunm;
        this.num = num;
    }

    @Override
    public String toString() {
        return "SingleNode{" + "row=" + row + ", colunm=" + colunm + ", num=" + num + '}';
    }
}

創建模擬鏈表類 提供添加結點、遍歷鏈表和還原數組等方法

public class SingleLinkList {
    //頭節點
    private SingleNode headSingleNode;
	//通過構造行數初始化頭節點
    public SingleLinkList(SingleNode headSingleNode) {
        this.headSingleNode = headSingleNode;
    }

    /**
     * 添加結點(追加在鏈表的尾端)
     */
    public void add(SingleNode SingleNode){
        SingleNode temp = headSingleNode;
        while(true){
            if (temp.next == null) {
                //如果這個結點的next域為空就跳出while循環
                break;
            }
            //將下一個結點賦值給temp
            temp = temp.next;
        }
        temp.next= SingleNode;
    }
    /**
     * 遍歷單項鏈表
     */
    public void show(){
        if (headSingleNode.next == null) {
            System.out.println("當前鏈表為空");
            return;
        }
        SingleNode temp = headSingleNode;
        while (true){
            if (temp.next == null){
                break;
            }
            temp = temp.next;
            System.out.println(temp);
        }
    }

    /**
     * 將鏈表還原成二維數組
     * @return array還原后的二維數組
     */
    public int[][] backToArray(){
        SingleNode temp = headSingleNode;
        //頭結點中存儲著原數組的行數和列數
        //通過這兩個值創建二維數組
        int[][] array = new int[headSingleNode.row][headSingleNode.colunm];
        while (true){
            if (temp.next == null){
                break;
            }
            temp = temp.next;
            //每遍歷一個結點就還原一個數據
            array[temp.row][temp.colunm] = temp.num;
        }
        return array;
    }
}
public class ArrayToLink {
    public static void main(String[] args) {
        int[][] array = new int[4][5];
        //初始化二維數組
        array[0][2] = 1;
        array[1][1] = 2;
        array[2][3] = 3;

        System.out.println("========普通數組========");
        //遍歷二維數組
        int count = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j]!=0){
                    count++;
                }
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }

        //將數組轉化成鏈式存儲
        SingleLinkList list = new SingleLinkList(new SingleNode(array.length,array[0].length,count));
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] != 0){
                	//當數字不為0時視為有效值就創建一個結點并添加到鏈表尾部
                    list.add(new SingleNode(i,j,array[i][j]));
                }
            }
        }
        System.out.println("========轉化后的鏈表========");
        //遍歷單向鏈表
        list.show();

        int[][] returnArray = list.backToArray();
        //遍歷還原后的二維數組
        System.out.println("========還原后的數組========");
        for (int i = 0; i < returnArray.length; i++) {
            for (int j = 0; j < returnArray[i].length; j++) {
                System.out.print(returnArray[i][j] + " ");
            }
            System.out.println();
        }
    }
}

輸出結果

Java怎么實現將二維數組轉化為鏈式儲存

“Java怎么實現將二維數組轉化為鏈式儲存”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武胜县| 浪卡子县| 上杭县| 石泉县| 米林县| 益阳市| 正阳县| 洪泽县| 航空| 兴宁市| 湖口县| 阿合奇县| 进贤县| 读书| 唐河县| 乌兰县| 英山县| 和硕县| 义马市| 额敏县| 辽中县| 邹城市| 孟连| 温州市| 忻城县| 中西区| 灌南县| 南京市| 平度市| 余干县| 灵宝市| 漳平市| 赣榆县| 沙河市| 两当县| 苗栗市| 子洲县| 乐山市| 姜堰市| 江华| 永川市|