資料結構之稀疏陣列的使用場景及實現

2022-08-18 19:12:11 字數 4184 閱讀 4713

一、資料結構與演算法的關係

1.資料data結構(structure)是一門研究組織資料方式的學科,有了程式語言也就有了資料結構.學好資料結構可以編寫出更加漂亮,更加有效率的**。

2.要學習好資料結構就要多多考慮如何將生活中遇到的問題,用程式去實現解決.

3.程式 = 資料結構 + 演算法

4.資料結構是演算法的基礎, 換言之,想要學好演算法,需要把資料結構學到位。

二、資料結構

1.資料結構包括:線性結構和非線性結構。

線性結構:

線性結構作為最常用的資料結構,其特點是資料元素之間存在一對一的線性關係

線性結構有兩種不同的儲存結構,即順序儲存結構和鏈式儲存結構。順序儲存的線性表稱為順序表,順序表中的儲存元素是連續的

鏈式儲存的線性表稱為鍊錶,鍊錶中的儲存元素不一定是連續的,元素節點中存放資料元素以及相鄰元素的位址資訊

線性結構常見的有:陣列、佇列、鍊錶和棧,後面我們會詳細講解.

2.非線性結構 非線性結構包括:二維陣列,多維陣列,廣義表,樹結構,圖結構

三、稀疏(sparsearray)陣列

1.基本介紹

當乙個陣列中大部分元素為0,或者為同乙個值的陣列時,可以使用稀疏陣列來儲存該陣列。

2.稀疏陣列的處理方法是:

1) 記錄陣列一共有幾行幾列,有多少個不同的值

2) 把具有不同值的元素的行列及值記錄在乙個小規模的陣列中,從而縮小程式的規模

3.稀疏陣列舉例說明:

存在乙個6行7列的二維陣列,可以轉換成稀疏陣列來進儲存,可轉換為

稀疏陣列固定是有三列,而且第一行的資料也是固定的,[0][1]是原陣列的行數,[0][2]是原陣列的列數,[0][3]是原陣列中不為0的值的個數。

稀疏陣列除了第一行之外,其餘的各行儲存的是原陣列中不為0的數在原陣列中的行號、列號和值。比如稀疏陣列的第1行,儲存的是數值22在原陣列中的位置以及值域。

4.稀疏陣列的應用場景

編寫的五子棋程式中,有存檔退出和續上盤的功能。

5.**實現

/**

* 五子棋演算法:稀疏陣列

*/public class sparsearray

}system.out.println();

}system.out.println("sum = "+sum);

//建立稀疏陣列

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

//給稀疏陣列的第一行複製

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

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

sparsearray[0][2] = sum;

int count = 0;//記錄稀疏陣列的行號

//便利原陣列,給稀疏陣列賦值

for (int i = 0; i < originalarray.length; i++) }}

//將稀疏陣列儲存到檔案中

file file = new file("檔案位址");

filewriter filewriter = null;

try

filewriter.write("\r\n");

}} catch (exception e) finally catch (ioexception e)

}//讀取檔案中的稀疏陣列

filereader filereader = null;

bufferedreader bufferedreader = null;

string lineval;//一行的記錄

int row = 0;//記錄行號

try

} catch (exception e) finally catch (ioexception e)

}//列印稀疏陣列

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

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

//在將稀疏陣列轉為原陣列

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

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

//重新列印原陣列

system.out.println("原陣列為~~~~~~~~");

for (int rows : newarray)

system.out.println();}}

}

執行結果

0    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 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 0sum = 2稀疏陣列為~~~~~~~

11 11 2

1 2 1

2 3 2原陣列為~~~~~~~~

0 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 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

redis資料結構及使用場景

string的實際應用場景比較廣泛的有 list 是有序列表,這個還是可以玩兒出很多花樣的。比如可以通過 lrange 命令,讀取某個閉區間內的元素,可以基於 list 實現分頁查詢,這個是很棒的乙個功能,基於 redis 實現簡單的高效能分頁,可以做類似微博那種下拉不斷分頁的東西,效能高,就一頁一...

Redis 資料結構使用場景

redis共有5種資料結構,每種的使用場景都是什麼?原來看過 redisbook 這本書,對 redis 的基本功能都已經熟悉了,從上週開始看 redis 的原始碼。目前目標是吃透 redis 的資料結構。我們都知道,在 redis 中一共有5種資料結構,那每種資料結構的使用場景都是什麼呢?下面我們...

Redis 資料結構使用場景

redis共有5種資料結構,每種的使用場景都是什麼?原來看過 redisbook 這本書,對 redis 的基本功能都已經熟悉了,從上週開始看 redis 的原始碼。目前目標是吃透 redis 的資料結構。我們都知道,在 redis 中一共有5種資料結構,那每種資料結構的使用場景都是什麼呢?下面我們...