01 稀疏陣列

2022-02-15 05:23:29 字數 1573 閱讀 7761

參考 《韓順平資料結構和演算法》

當乙個陣列(此處針對二維)中大部分元素為0,或者為同乙個值的陣列時,可以採用稀疏陣列來儲存該陣列。

通常定義乙個二維陣列去儲存資料,其中必定會有一些無效資訊(可以認為是0),所以乙個10*10的二維陣列,即使其中只有20個有效資料,如果不進行優化,需要占用100個資料空間;如果使用稀疏陣列去優化,則只需要20*3=60個資料空間。

但如果只是乙個3*3的二維陣列,其中儲存了6個有效資料呢?那我們就要用乙個6*3的稀疏陣列,顯然稀疏陣列不再稀疏。

所以稀疏陣列只適用於大型的二維陣列

}//記錄其中有效資料的個數

int sum = 0;

for (int i = 0; i < 11; i++) }}

system.out.println("有效資料個數sum="+sum);

//定義乙個稀疏陣列

//陣列行數為,有效資料個數+1,列數為3

int sparsearray = new int[sum+1][3];

sparsearray[0][0] = chessarray.length;

sparsearray[0][1] = chessarray[0].length;

sparsearray[0][2] = sum;

//再次遍歷11*11的陣列,遇到有效資料就填充到稀疏陣列中

//count可以理解為計數器

int count = 0;

for (int i = 0; i < 11; i++) }}

system.out.println("稀疏陣列為:");

for (int row: sparsearray)

system.out.println();

}//從稀疏陣列恢復原先的二維陣列

//讀取稀疏陣列的第一行,定義乙個對應大小的二維陣列

int chessarray_2 = new int[sparsearray[0][0]][sparsearray[0][1]];

//遍歷稀疏陣列的每一行,並填充到新的二維陣列

for (int i = 1; i < sparsearray.length; i++)

//列印新的二維陣列

system.out.println("恢復出的二維陣列:");

for (int row : chessarray_2)

system.out.println();}}

列印輸出為:

資料結構 01 稀疏陣列

將二維陣列 轉 稀疏陣列的思路 1 先遍歷二位陣列 得到非0個數 int sum 0 for int i 0 i chessarr1.length i system.out.println 非0個數 system.out.println sum 建立對應稀疏陣列 int sparsearray ne...

資料結構01 稀疏陣列

二維陣列轉稀疏陣列思路 1 建立乙個二維陣列,遍歷獲取有效資料的個數sum 2 根據sum建立稀疏陣列int sum 1 3 並對於第一行屬性處賦值 3 遍歷二維陣列將有效資料存入稀疏陣列 稀疏陣列轉二維陣列思路 public class 稀疏陣列 根據sum建立稀疏陣列 int sparsearr...

go資料結構01 稀疏陣列

換行 2 建立乙個稀疏陣列,記錄陣列中的元素 思路 遍歷棋盤,如果有乙個元素不為0,那麼建立乙個node結構體,將其放入到棋盤中去 var sparsearr valnode 建立乙個值節點儲存棋盤大小 vnodee valnode sparsearr sparsearr,vnodee for i,...