數據結構類型
數據結構包括:線性結構和非線性結構。
線性結構與非線性結構
線性結構
- 線性結構作爲最常用的數據結構,其特點是數據元素之間存在一對一的線性關係。
- 線性結構有兩種不同的存儲結構,即順序存儲結構和鏈式儲存結構。順序存儲的線性表稱爲順序表,順序表中的存儲元素是連續的。
- 鏈式存儲的線性表稱爲鏈表,鏈表中的儲存元素不一定是連續的,元素節點種存放數據元素以及相鄰元素的地址信息。
- 線性結構常見的有:數組,隊列,鏈表和棧。
非線性結構
非線性結構包括:二維數組,多維數組,廣義表,樹結構,圖結構。
稀疏數組
基本介紹
當一個數組種大部分元素爲0,或者爲同一個值的數組時,可以使用稀疏數組來保存該數組。
稀疏數組的處理方法
- 第一行記錄數組一共有幾行幾列,有多少個不同的值。
- 把具有不同值的元素的行列及值記錄在一個小規模的數組種,從而縮小程序的規模。
實例應用
- 使用稀疏數組,來保留類似前面的二維數組(棋盤,地圖等等)
- 把稀疏數組存盤,並且可以從新恢復到原來的二維數組
- 整體思路分析
稀疏數組舉例說明
實際應用與轉化圖像如下↓
二維數組轉稀疏數組的思路
- 遍歷 原始的二維數組,得到有效數據的個數sum
- 根據sum就可以創建稀疏數組sparseArr int[sum+1][3]
- 將二維數組的有效數據存入到稀疏數組中
稀疏數組轉原始的二維數組思路
- 先讀取稀疏數組的第一行,根據第一行的數據,窗口原始二維數組,比如上面的chessArr2=int[11][11];
- 在讀取稀疏數組後幾行的數據,並賦給這個原始的二維數組即可。
代碼實例
//二維數組轉稀疏數組轉二維數組
public class SparseArray {
public static void main(String[] args){
//創建原始的二維數組 11*11
//0表示沒有棋子,1表示白子,2表示黑子
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
//輸出原始的二維數組
System.out.println("原始的二維數組");
for (int[] row : chessArr1){
for (int data : row){
System.out.print("%d\t" + data);
}
System.out.println();
}
//將二維數組轉爲稀疏數組
//1.先遍歷二維數組得到非0數據的個數
int sum = 0;
for (int i = 0;i < chessArr1.length;i ++){
for (int j = 0; j < chessArr1.length;j ++){
if (chessArr1[i][j] != 0){
sum ++;
}
}
}
//2.創建對應的稀疏數組
int sparseArr[][] = new int[sum + 1][3];
//給稀疏數組賦值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//遍歷二維數組,將非0的值存放到稀疏數組種
int count = 0; //coun 用於記錄第幾個非0數據,就是排序
for (int i = 0;i < chessArr1.length;i ++){
for (int j = 0; j < chessArr1.length;j ++){
if (chessArr1[i][j] != 0){
count ++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//輸出稀疏數組的形式
System.out.println();
System.out.println("得到的稀疏數組爲~~");
for (int i = 0;i < sparseArr.length;i ++){
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
System.out.println();
/*將稀疏數字恢復成原始的二維數組
//先讀取稀疏數組的第一行,根據第一行的數據,窗口原始二維數組,比如上面的chessArr2=int[11][11];
在讀取稀疏數組後幾行的數據(從第二行開始),並賦給這個原始的二維數組即可。*/
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1;i < sparseArr.length; i ++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//輸出恢復後的二維數組
System.out.println();
System.out.println("恢復後的二維數組~~");
for (int[] row : chessArr2){
for (int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
編程我也是初學者,難免有寫錯的地方,希望大家看完之後,發現錯誤可以評論出來,謝謝大家