數據結構之稀疏數組的實現

一、概述

當我們編寫一個二維數組時,可能會存在着許多數據重複的情況,如下圖:

在這裏插入圖片描述
這樣可能會造成程序的運行緩慢,不夠簡潔。那麼我們是否能有一種方式,將這個數組壓縮,使其化簡爲一個簡潔、不冗餘的二維數組呢? 下面就引出我們稀疏數組的概念。

二、概念

下圖爲原二維數組轉換爲稀疏數組的樣式:

在這裏插入圖片描述

1. 其第一行第一列代表原二維數組的行數
2. 其第一行第二列代表原二維數組的列數
3. 其第一行第三列代表原二維數組的不同元素的個數

4. 第二行與第三行則代表不同元素在原數組中的位置

也是比較好理解的呀~

下面就是實現的思路了

三、思路

將二維數組轉化成稀疏數組:

1.首先我們遍歷原數組,可以得到原數組中不同數據的個數,我們假設爲sum;
2.接下來我們根據sum,就可以相對應的創建一個稀疏數組 Arr int[sum+1][3];
(注:sum+1 是因爲我們的稀疏數組第一行存的是原始數組的行、列以及不同數據個數
後面的 3 列 是因爲我們僅僅只需要三列數據)
3.將原始二維數組中的有效數據存放到稀疏數組中。

這樣我們的第一步就大功告成了~
但是我們轉換成稀疏數組後,也要想辦法將其轉換回來呀!

將稀疏數組轉換成二維數組:

1.首先我們讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組。
2.接下來繼續讀取稀疏數組剩下的幾行,然後賦值給原始的二維數組就行。

最後,上代碼。詳細說明。

四、代碼實現

首先
在這裏插入圖片描述

將二維數組轉化成稀疏數組:
在這裏插入圖片描述
將稀疏數組轉換成二維數組:
在這裏插入圖片描述

五、結語

整體的思路流程我覺得挺清晰的。而且我覺得這個知識點,在未來的開發中也會起到挺大的幫助(儘管我現在還沒用到)。能夠極大的提高代碼的運行效率,以及質量。

做個筆記,自己日後遺忘的時候,也能夠翻出來看看~
也希望能夠幫助到其他的小夥伴呀~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章