數據結構23::多維數組


數組,所有的程序設計語言學習之初都有它的身影。根據數組中存儲的數據元素之間的邏輯關系,可以將數組分為 : 一維數組、二維數組、…、n維數組。 n維數組中,維數 n 的判斷依據是:根據數組中為確定元素所在位置使用的最少的下標個數。
例如,二維數組中想唯一確定一個元素的位置,至少需要使用
2 個下標, a[1][1]代表二維數組中行坐標為 1,列坐標為 1 的數據元素的值。 數組VS順序表 數組和順序表的本質不同。數組作為一種數據類型,作用是將類型相同的數據存儲在一整塊內存中,數組中存儲的數據之間沒有任何邏輯關系,誰也不認識誰。 順序表作為線性表的存儲結構,存儲的這些數據元素在物理存儲結構上相鄰的同時,在邏輯結構上也相鄰,每個數據元素都清楚地知道緊挨着它的前邊
的元素和后邊的元素。 如果用一句話來描述兩者之間的關系,就是:用數組來存儲的線性表是順序表。 數組的邏輯結構 一維數組由於本身存儲的數據元素類型相同、且各數據元素在邏輯結構上相鄰(物理結構上也相鄰),是線性表的順序存儲結構的具體實現。
可以說:一維數組是線性表的一種表示形式。 一維數組中存儲的各成員如果還是一維數組,就變成了二維數組: 圖1 二維數組的邏輯結構 圖1中,一維數組 b[
6] 中每個單元都存放着長度為 6 的數組(例如:b[0] 存放的是 a[6] ,b[1] ~ b[5] 也和 b[0] 一樣),
就組成了 array[6][6] 的二維數組。 同樣,三維數組,也就可以看作是存儲二維數組的一維數組;對於 n 維數組來說,可以看作是存儲有 (n-1) 維數組的一維數組。 所以,n 維數組可以看作是線性表的一種擴展。 數組的順序存儲結構 數組在存儲時有兩種存儲方式: 以列序為主(先列后行) 以行序為主(先行后列) 例如,a[6][6]以列序存儲: 圖2 數組的列序存儲 以行序存儲: 圖3 數組的行序存儲 C語言中,使用的是以行序為主的順序存儲方式。 數組中調取數據元素 在n維數組中調取數據元素,需要知道以下因素: 數組存放的起始位置(也就是數組中第一個元素的存儲位置)。 被調取元素在 n 維數組中的具體位置(例如,二維數組需要知道被調取元素 aij 在數組中的行標 i 和列標 j )。 數組中單個數據元素占用的內存空間,一般用 L 表示(數組中存放的數據的類型都一樣)。 如果在以行序存儲的二維數組 anm 中查找某個數據元素 aij 的存儲位置,方法是: LOC(i,j) = LOC (0,0) + (i*m+j)*L; LOC(i,j) : aij 在內存中的地址;LOC(0,0) : a00 存儲的地址,其實就是整個二維數組存放的起始地址。 同樣,以列序存儲的查找方法是: LOC(i,j) = LOC (0,0) + (i*n+j)*L;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM