多維數(shù)組和廣義表是一種復(fù)雜的非線性結(jié)構(gòu),它們的邏輯特征是:一個(gè)數(shù)據(jù)元素可能有多個(gè)直接前驅(qū)和多個(gè)直接后繼。
多維數(shù)組
1、數(shù)組(向量)——常用數(shù)據(jù)類型
一維數(shù)組(向量)是存儲(chǔ)于計(jì)算機(jī)的連續(xù)存儲(chǔ)空間中的多個(gè)具有統(tǒng)一類型的數(shù)據(jù)元素。
同一數(shù)組的不同元素通過不同的下標(biāo)標(biāo)識(shí)。
(a1,a2,…,an)
2、二維數(shù)組
二維數(shù)組Amn可視為由m個(gè)行向量組成的向量,或由n個(gè)列向量組成的向量。
二維數(shù)組中的每個(gè)元素aij既屬于第i行的行向量,又屬于第j列的列向量。
3、多維數(shù)組
三維數(shù)組Amnp可視為以二維數(shù)組為數(shù)據(jù)元素的向量。四維數(shù)組可視為以三維數(shù)組為數(shù)據(jù)元素的向量……
三維數(shù)組中的每個(gè)元素aijk都屬于三個(gè)向量。四維數(shù)組中的每個(gè)元素都屬于四個(gè)向量……
4、數(shù)組的順序存儲(chǔ)方式
由于計(jì)算機(jī)內(nèi)存是一維的,多維數(shù)組的元素應(yīng)排成線性序列后存人存儲(chǔ)器。
數(shù)組一般不做插入和刪除操作,即結(jié)構(gòu)中元素個(gè)數(shù)和元素間關(guān)系不變化。一般采用順序存儲(chǔ)方法表示數(shù)組。
(1)行優(yōu)先順序
將數(shù)組元素按行向量排列,第i+1個(gè)行向量緊接在第i個(gè)行向量后面。
【例】二維數(shù)組Amn的按行優(yōu)先存儲(chǔ)的線性序列為:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:
①PASCAL和C語(yǔ)言中,數(shù)組按行優(yōu)先順序存儲(chǔ)。
②行優(yōu)先順序推廣到多維數(shù)組,可規(guī)定為先排最右的下標(biāo)。
(2)列優(yōu)先順序
將數(shù)組元素按列向量排列,第i+1個(gè)列向量緊接在第i個(gè)列向量后面。
【例】二維數(shù)組Amn的按列優(yōu)先存儲(chǔ)的線性序列為:
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:
①FORTRAN語(yǔ)言中,數(shù)組按列優(yōu)先順序存儲(chǔ)。
②列優(yōu)先順序推廣到多維數(shù)組,可規(guī)定為先排最左的下標(biāo)。
5、數(shù)組元素的地址計(jì)算公式
(1)按行優(yōu)先順序存儲(chǔ)的二維數(shù)組Amn地址計(jì)算公式
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中:
①LOC(a11)是開始結(jié)點(diǎn)的存放地址(即基地址)
②d為每個(gè)元素所占的存儲(chǔ)單元數(shù)
③由地址計(jì)算公式可得,數(shù)組中任一元素可通過地址公式在相同時(shí)間內(nèi)存取。即順序存儲(chǔ)的數(shù)組是隨機(jī)存取結(jié)構(gòu)。
(2)按列優(yōu)先順序存儲(chǔ)的二維數(shù)組Amn地址計(jì)算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
(3)按行優(yōu)先順序存儲(chǔ)的三維數(shù)組Amnp地址計(jì)算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)下界不為1的二維數(shù)組的地址計(jì)算公式
①二維數(shù)組A[c1..d1,c2..d2]的地址計(jì)算公式:
LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界為0的二維數(shù)組的地址計(jì)算公式(C語(yǔ)言中使用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意:
以下討論的數(shù)組存儲(chǔ)結(jié)構(gòu)都以C語(yǔ)言下標(biāo)表示。
多維數(shù)組
1、數(shù)組(向量)——常用數(shù)據(jù)類型
一維數(shù)組(向量)是存儲(chǔ)于計(jì)算機(jī)的連續(xù)存儲(chǔ)空間中的多個(gè)具有統(tǒng)一類型的數(shù)據(jù)元素。
同一數(shù)組的不同元素通過不同的下標(biāo)標(biāo)識(shí)。
(a1,a2,…,an)
2、二維數(shù)組
二維數(shù)組Amn可視為由m個(gè)行向量組成的向量,或由n個(gè)列向量組成的向量。
二維數(shù)組中的每個(gè)元素aij既屬于第i行的行向量,又屬于第j列的列向量。
3、多維數(shù)組
三維數(shù)組Amnp可視為以二維數(shù)組為數(shù)據(jù)元素的向量。四維數(shù)組可視為以三維數(shù)組為數(shù)據(jù)元素的向量……
三維數(shù)組中的每個(gè)元素aijk都屬于三個(gè)向量。四維數(shù)組中的每個(gè)元素都屬于四個(gè)向量……
4、數(shù)組的順序存儲(chǔ)方式
由于計(jì)算機(jī)內(nèi)存是一維的,多維數(shù)組的元素應(yīng)排成線性序列后存人存儲(chǔ)器。
數(shù)組一般不做插入和刪除操作,即結(jié)構(gòu)中元素個(gè)數(shù)和元素間關(guān)系不變化。一般采用順序存儲(chǔ)方法表示數(shù)組。
(1)行優(yōu)先順序
將數(shù)組元素按行向量排列,第i+1個(gè)行向量緊接在第i個(gè)行向量后面。
【例】二維數(shù)組Amn的按行優(yōu)先存儲(chǔ)的線性序列為:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
注意:
①PASCAL和C語(yǔ)言中,數(shù)組按行優(yōu)先順序存儲(chǔ)。
②行優(yōu)先順序推廣到多維數(shù)組,可規(guī)定為先排最右的下標(biāo)。
(2)列優(yōu)先順序
將數(shù)組元素按列向量排列,第i+1個(gè)列向量緊接在第i個(gè)列向量后面。
【例】二維數(shù)組Amn的按列優(yōu)先存儲(chǔ)的線性序列為:
a11,a21,…,am1,a12,a22,…,am2,……,a1n,a2n,…,amn
注意:
①FORTRAN語(yǔ)言中,數(shù)組按列優(yōu)先順序存儲(chǔ)。
②列優(yōu)先順序推廣到多維數(shù)組,可規(guī)定為先排最左的下標(biāo)。
5、數(shù)組元素的地址計(jì)算公式
(1)按行優(yōu)先順序存儲(chǔ)的二維數(shù)組Amn地址計(jì)算公式
LOC(aij)=LOC(a11)+[(i-1)×n+j-1]×d
其中:
①LOC(a11)是開始結(jié)點(diǎn)的存放地址(即基地址)
②d為每個(gè)元素所占的存儲(chǔ)單元數(shù)
③由地址計(jì)算公式可得,數(shù)組中任一元素可通過地址公式在相同時(shí)間內(nèi)存取。即順序存儲(chǔ)的數(shù)組是隨機(jī)存取結(jié)構(gòu)。
(2)按列優(yōu)先順序存儲(chǔ)的二維數(shù)組Amn地址計(jì)算公式
LOC(aij)=LOC(a11)+[(j-1)×m+i-1]×d
(3)按行優(yōu)先順序存儲(chǔ)的三維數(shù)組Amnp地址計(jì)算公式
LOC(aijk)=LOC(a111)+[(i-1)×n×p+(j-1)×p+k-1]×d
(4)下界不為1的二維數(shù)組的地址計(jì)算公式
①二維數(shù)組A[c1..d1,c2..d2]的地址計(jì)算公式:
LOC(aij)=LOC(ac1c2)+[(i-c1)×(d2-c2+1)+j-c2]×d
②下界為0的二維數(shù)組的地址計(jì)算公式(C語(yǔ)言中使用)
LOC(aij)=LOC(a00)+[i×(d2+1)+j]×d
注意:
以下討論的數(shù)組存儲(chǔ)結(jié)構(gòu)都以C語(yǔ)言下標(biāo)表示。