全球疫情每日數(shù)據(jù)查詢googleseo服務(wù)公司
文章目錄
目錄
文章目錄
前言
一 什么是稀疏數(shù)組??
二 稀疏數(shù)組怎么存儲數(shù)據(jù)?
三 稀疏數(shù)組的實現(xiàn)
總結(jié)
前言
大家好,好久不見了,這篇博客是數(shù)據(jù)結(jié)構(gòu)的第一篇文章,望大家多多支持!
一 什么是稀疏數(shù)組??
稀疏數(shù)組(Sparse Array)是一種數(shù)據(jù)結(jié)構(gòu),用于表示大部分元素值為默認(rèn)值的數(shù)組。在稀疏數(shù)組中,只有非默認(rèn)值的元素被存儲,而默認(rèn)值的元素則被忽略。這樣可以節(jié)省存儲空間,特別適用于稀疏矩陣等大規(guī)模數(shù)據(jù)結(jié)構(gòu)。
稀疏數(shù)組通常由三個部分組成:
- 原始數(shù)組的大小:記錄原始數(shù)組的行數(shù)和列數(shù)。
- 非默認(rèn)值元素的個數(shù):記錄非默認(rèn)值元素的個數(shù)。
- 非默認(rèn)值元素的位置和值:以二維數(shù)組的形式存儲非默認(rèn)值元素的位置和值。
通過使用稀疏數(shù)組,可以在存儲和傳輸數(shù)據(jù)時減少所需的空間和時間。
簡單來說,就是壓縮數(shù)據(jù)時使用,稀疏數(shù)組同樣也是一種數(shù)據(jù)結(jié)構(gòu)
二 稀疏數(shù)組怎么存儲數(shù)據(jù)?
稀疏數(shù)組通常由三個部分組成:
- 原始數(shù)組的大小:記錄原始數(shù)組的行數(shù)和列數(shù)。
- 非默認(rèn)值元素的個數(shù):記錄非默認(rèn)值元素的個數(shù)。
- 非默認(rèn)值元素的位置和值:以二維數(shù)組的形式存儲非默認(rèn)值元素的位置和值。
圖解:
稀疏數(shù)組的第一行記錄的不是元素,而是原數(shù)組的行數(shù),列數(shù),非零元素個數(shù)。
稀疏數(shù)組其他行記錄的是原數(shù)組非零元素的行列和值
解釋的話難免有些不清楚,大家看圖即可!
三 稀疏數(shù)組的實現(xiàn)
接下來帶大家一步步的來實現(xiàn)稀疏數(shù)組(按上面圖示實現(xiàn))!
1.首先創(chuàng)建一個六行七列的二維數(shù)組 int[][] arr
2.給原數(shù)組賦值并遍歷
3.創(chuàng)建稀疏數(shù)組SpareArr[][]
這三個沒什么難度,大家覺得行的可以嘗試一下下面的三個,代碼給出
int[][] arr = new int[6][7];// 創(chuàng)建數(shù)組存入數(shù)據(jù)并初始化arr[0][3] = 22; arr[0][6] = 15; arr[1][1] = 11; arr[1][5] = 17; arr[2][3] = -6; arr[3][5] =39 ; arr[4][0] =91 ; arr[5][2] =28 ;//遍歷打印并記錄非零元素的個數(shù) int sum = 0; for (int[] ints : arr) {for (int j = 0; j < arr[0].length; j++) {System.out.print(ints[j] + " ");if (ints[j] != 0) {sum += 1;}}System.out.println(); }// 創(chuàng)建稀疏數(shù)組 // 稀疏數(shù)組的行為元素的個數(shù)+1 因為稀疏數(shù)組的第一行記錄的是總的元素個數(shù),而不是某一個元素的值 int[][] SpareArray = new int[sum+1][3];
4.給稀疏數(shù)組賦值
// 稀疏數(shù)組的第一行比較特殊,因此我們不借助循環(huán),直接進(jìn)行賦值。 SpareArray[0][0] = arr.length;// 原數(shù)組的行 SpareArray[0][1] = arr[0].length;// 原數(shù)組的列 SpareArray[0][2] = sum;// 原數(shù)組中元素的個數(shù)//遍歷原數(shù)組,并將數(shù)組中的元素存入稀疏數(shù)組中 int count = 0; for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[0].length; j++) {if(arr[i][j] != 0){// 如果元素不為零,就講該元素存入稀疏數(shù)組中count++;SpareArray[count][0] = i;SpareArray[count][1] = j;SpareArray[count][2] = arr[i][j];}} }
5.將稀疏數(shù)組導(dǎo)入\導(dǎo)出文件
// 創(chuàng)建字符緩沖輸出流將稀疏數(shù)組保存到文件中 FileOutputStream fos = new FileOutputStream("D:\\系統(tǒng)默認(rèn)\\桌面\\測試.txt");for (int[] ints : SpareArray) {for (int j = 0; j < SpareArray[0].length; j++) {fos.write(ints[j]);} } fos.close();FileInputStream fis = new FileInputStream("D:\\系統(tǒng)默認(rèn)\\桌面\\測試.txt"); int read1 = fis.read();// 行 int read2 = fis.read();// 列 int read3 = fis.read();// 總個數(shù) count = read3;int[][] newArr = new int[read1][read2]; for (int i = 0; i < count; i++) {read1 = fis.read();read2 = fis.read();read3 = fis.read();newArr[read1][read2] = read3; } fis.close();for (int i = 0; i < newArr.length; i++) {for (int j = 0; j < newArr[0].length; j++) {System.out.print(newArr[i][j]+" ");}System.out.println(); }
看著是不是挺簡單的,我也這么覺得
總結(jié)
就到這了,感謝大家觀看!