日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

数据结构之稀疏数组 - SparseArray

發(fā)布時(shí)間:2025/3/21 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之稀疏数组 - SparseArray 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)注 “弋凡”(YiFan)微信公眾號(hào)吧 記錄簡(jiǎn)單筆記 做你的最?lèi)?ài)

1,定義

稀疏數(shù)組可以看作普通二維數(shù)組的壓縮,這里的普通數(shù)組指無(wú)效數(shù)據(jù)遠(yuǎn)大于有效數(shù)據(jù)

稀疏數(shù)組分為3列

行 列 值 r1 c1 v1 r2 c2 v2 ... ... ...

普通二維數(shù)組 - 無(wú)效數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于有效數(shù)據(jù)

0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

稀疏數(shù)組

11 11 3 1 1 1 2 2 2 2 4 2

2,代碼實(shí)現(xiàn)

package com.yifan.nolinear;import java.io.*;/*** @Author YIFan* @Date 2020/6/7 17:49* @Version 1.0*/// 稀疏數(shù)組 public class SparseArray {public static void main(String[] args) throws IOException {// 創(chuàng)建一個(gè)二維數(shù)組 11*11// 0 表示沒(méi)有數(shù)組 1 表示黑子 2 表示 白子int[][] chessArry = new int[11][11];chessArry[1][1] = 1;chessArry[2][2] = 2;chessArry[2][4] = 2;// 輸錯(cuò)原始數(shù)組System.out.println("原始數(shù)組...");for (int[] row : chessArry) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}int sum = 0;//將二維數(shù)組轉(zhuǎn)化為稀疏數(shù)組//1,二維數(shù)組得到非零數(shù)據(jù)的個(gè)數(shù)for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if(chessArry[i][j] != 0 ){sum++;}}}//2,創(chuàng)建對(duì)應(yīng)的稀疏數(shù)組int sparseArr[][] = new int[sum+1][3];// 給稀疏數(shù)組賦值// 行數(shù)sparseArr[0][0] = 11;// 列數(shù)sparseArr[0][1] = 11;// 有效數(shù)sparseArr[0][2] = sum;//3,遍歷二維數(shù)組,將非0的值存到sparseArr中//------> (稀疏數(shù)組格式) 行 列 值int count = 0; // 用于記錄第幾個(gè)是非0數(shù)據(jù)for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if(chessArry[i][j] != 0 ){count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArry[i][j];}}}//4,輸出稀疏數(shù)組System.out.println();System.out.println("稀疏數(shù)組為....");//寫(xiě)入到文件中File file = new File("d:/a.data");FileOutputStream in = new FileOutputStream(file);for (int i = 0; i < sparseArr.length; i++) {String str = sparseArr[i][0]+"-"+sparseArr[i][1]+"-"+sparseArr[i][2]+"\n";in.write(str.getBytes());System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);}System.out.println("寫(xiě)入文件成功...");in.close();//5,將稀疏數(shù)組還原成原始的二維數(shù)組/** 1,先讀取稀疏數(shù)組的第一行,根據(jù)第一行數(shù)據(jù),創(chuàng)建原始的二維數(shù)組* 2,在讀取稀疏數(shù)組的后幾行數(shù)據(jù),并賦值給二維數(shù)組* */// int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]]; // 從文件中讀取int[][] chessArr2 = null;BufferedReader reader = null;System.out.println("以行為單位讀取文件內(nèi)容,一次讀一整行:");reader = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;// 一次讀入一行,直到讀入null為文件結(jié)束while ((tempString = reader.readLine()) != null) {// 顯示行號(hào)System.out.println("line " + line + ": " + tempString);String[] split = tempString.split("-");int row = Integer.parseInt(split[0]);int col = Integer.parseInt(split[1]);if(line==1){chessArr2 = new int[row][col];}else {chessArr2[row][col] = Integer.parseInt(split[2]);}line++;}reader.close();// 用稀疏數(shù)組進(jìn)行還原 // for (int i = 1; i < sparseArr.length; i++) { // int row = sparseArr[i][0]; // int col = sparseArr[i][1]; // chessArr2[row][col] = sparseArr[i][2]; // }System.out.println("新的二維數(shù)組...");for (int[] row : chessArr2) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}}}

3,效果圖

快來(lái)關(guān)注“弋凡”微信公眾號(hào)吧

總結(jié)

以上是生活随笔為你收集整理的数据结构之稀疏数组 - SparseArray的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。