多維數組和廣義表是一種複雜的非線性結構,它們的邏輯特徵是:一個數據元素可能有多個直接前驅和多個直接後繼。
多維數組數組
一維數組(向量)是存儲於計算機的連續存儲空間中的多個具備統一類型的數據元素。
同一數組的不一樣元素經過不一樣的下標標識。spa
(a1,a2,…,an)
二維數組Amn可視爲由m個行向量組成的向量,或由n個列向量組成的向量。 code
二維數組中的每一個元素aij既屬於第i行的行向量,又屬於第j列的列向量。blog
三維數組Amnp可視爲以二維數組爲數據元素的向量。四維數組可視爲以三維數組爲數據元素的向量……
三維數組中的每一個元素aijk都屬於三個向量。四維數組中的每一個元素都屬於四個向量……
內存
因爲計算機內存是一維的,多維數組的元素應排成線性序列後存人存儲器。 數組通常不作插入和刪除操做,即結構中元素個數和元素間關係不變化。通常採用順序存儲方法表示數組。
(1)、行優先順序
將數組元素按行向量排列,第i+1個行向量緊接在第i個行向量後面。
【例】二維數組Amn的按行優先存儲的線性序列爲:class
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:
① PASCAL和C語言中,數組按行優先順序存儲。
② 行優先順序推廣到多維數組,可規定爲先排最右的下標。數據類型
(2)、列優先順序
將數組元素按列向量排列,第i+1個列向量緊接在第i個列向量後面。
【例】二維數組Amn的按列優先存儲的線性序列爲:方法
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:
① FORTRAN語言中,數組按列優先順序存儲。
② 列優先順序推廣到多維數組,可規定爲先排最左的下標。im
(1)、按行優先順序存儲的二維數組Amn地址計算公式數據
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中:
① LOC(a11)是開始結點的存放地址(即基地址)
② d爲每一個元素所佔的存儲單元數
③ 由地址計算公式可得,數組中任一元素可經過地址公式在相同時間內存取。即順序存儲的數組是隨機存取結構。
(2)、按列優先順序存儲的二維數組Amn地址計算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
(3)、按行優先順序存儲的三維數組Amnp地址計算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)、下界不爲1的二維數組的地址計算公式
① 二維數組A[c1..d1,c2..d2]的地址計算公式:
LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
② 下界爲0的二維數組的地址計算公式(C語言中使用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意:
如下討論的數組存儲結構都以C語言下標表示。
矩陣用二維數組描述時,存儲的密度爲1。能夠對其元素進行隨機存取,各類矩陣運算也很是簡單。
矩陣中非零元素呈某種規律分佈或者矩陣中出現大量的零元素的狀況下,爲了節省存儲空間,咱們能夠對這類矩陣進行壓縮存儲:即爲多個相同的非零元素只分配一個存儲空間;對零元素不分配空間。