首先先介紹一下線性結構與非線性結構
線性結構是比較常用的資料結構,特點就是資料元素是一對一的關係。
線性結構有兩種不同的儲存結構,即順序儲存結構(陣列)和鏈式儲存結構(鍊錶)。順序儲存的線性表稱為順序表,順序表中儲存的元素是連續的。
鏈式儲存的線性表稱為鍊錶,鍊錶中儲存的元素不一定是連續的,元素節點中存放資料以及相鄰元素的位址資訊。
線性結構常見的有:陣列,佇列,鍊錶和棧。
非線性結構常見的有:二維陣列,多維陣列,廣義表,樹結構,圖結構。
言歸正傳,下面正式介紹稀疏陣列
當乙個陣列中大部分元素是0,或者為同乙個值的陣列時,可以用稀疏陣列來儲存該陣列。
簡言之就是將乙個大部分都是同乙個值的二維陣列進行壓縮。
首先遍歷二維陣列,找到多少行,多少列,多少個不同的值,這裡計作sum
宣告乙個二維陣列,比如int型別的int[sum+1][3]
的陣列
第一行分別存放,原陣列的行數,列數,不同數
第二行以後面分別存放,原陣列不同值所在的位置,行數,列數,本身值
先讀取到稀疏陣列的第一行,根據第一行,建立二維陣列。
從第二行開始遍歷稀疏陣列,獲取到位置與值,然後賦值給剛才建立的二維陣列。
二維陣列的樣子
0 0 0 2 0 5 0
0 1 0 0 0 0 0
0 0 0 0 0 0 0
0 4 0 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 0
轉為稀疏陣列的樣子
6 7 8
0 3 2
0 5 5
1 1 1
3 1 4
4 5 1
資料量從 6×7
=42
6 \times 7 = 42
6×7=42
變為了 3×6
=18
3 \times 6 = 18
3×6=18
,資料量縮小了
//二維轉稀缺
int[
] arr =,,
,};int sum =0;
for(
int[
] ints : arr)}}
int[
] sparsematrix =
newint
[sum+1]
[3];
sparsematrix[0]
[0]= arr.length;
sparsematrix[0]
[1]= arr[0]
.length;
sparsematrix[0]
[2]= sum;
int sparsematrixindex =1;
for(
int i =
0; i < arr.length; i++)}
}for
(int
matrix : sparsematrix)
objectoutputstream objectoutputstream =
newobjectoutputstream
(new
fileoutputstream
("d:"))
;objectoutputstream.
writeobject
(sparsematrix)
;objectoutputstream.
flush()
;objectoutputstream.
close()
;system.out.
println
("-----------------------------------");
objectinputstream objectinputstream =
newobjectinputstream
(new
fileinputstream
("d:"))
;int
mapdata =
(int
) objectinputstream.
readobject()
;objectinputstream.
close()
;//稀缺轉二維
int[
] arr2 =
newint
[mapdata[0]
[0]]
[mapdata[0]
[1]]
;for
(int i =
1; i < mapdata.length; i++
)for
(int
ints : arr2)
上面的例子,展示了將二維陣列轉化為稀疏陣列並序列化到磁碟中,然後從磁碟中讀取資料,恢復資料的整個流程。 初學資料結構與演算法 稀疏陣列
如下 示例 public static void main string args system.out.println 呼叫tosparsearr方法,把二維陣列轉化為稀疏陣列 int sparsearr tosparsearr chessarr1 呼叫writermapdate方法,把稀疏陣列儲...
資料結構和演算法 稀疏陣列
此部分是將上面的思路分析轉換成 實現 public class sparsearray system.out.println 將二維陣列轉換為稀疏陣列 1.先遍歷二維陣列,得到非0資料的個數 int sum 0 for int i 0 i 10 i 2.建立對應的稀疏陣列 int sparsearr...
稀疏陣列 資料結構 壓縮演算法
概述 當乙個陣列中大部份元素為0,或者為同一值的陣列時,可以使用稀疏陣列來儲存該陣列。處理方式 記錄陣列一共有幾行幾列,有多少不同值 把具有不同值的元素和行列及值記錄在乙個小規模的陣列中,從而縮小程式規模 建立乙個稀疏陣列儲存方式 public class helloworld system.out...