日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组元素的地址计算问题(一维到高维)

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组元素的地址计算问题(一维到高维) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)組元素存儲地址的計算

一維數(shù)組

設(shè)一維數(shù)組A[n]存放在n個連續(xù)的存儲單元中,每個數(shù)組元素占一個存儲單元(不妨設(shè)為C個連續(xù)字節(jié)).如果數(shù)組元素A[0]的首地址是L,則A[1]的首地址是L+C,A[2]的首地址是L+2C,… …,依次類推,對于有:

?

二維數(shù)組

二維數(shù)組的每個元素含兩個下標,如果將二維數(shù)組的第一個下標理解為行號,第二個下標理解為列號,然后按行列次序排列個元素,則二維數(shù)組呈陣列形狀。例如

它是一個行號為1~m,列號為1~n的二維數(shù)組元素陣列。

如何保存二維數(shù)組?

首先要確定一個順序

?

????????? ???????????

??????????????????? 0??????? 1??????? 2

?

????????? ???????????

?

??????????????????? 0??????? 1??????? 2

?

?

????????? ???????????

?


????????? ???????????

?

?

?

?

?

?

?

?

?

?


設(shè)count為數(shù)組B中元素的個數(shù),則count=9

按行優(yōu)先存儲

?

?

1

2

3

4

5

6

7

8

9

?

????????? 0???????????????? 1??????????????? 2??

?

?

按列優(yōu)先存儲

?

?

1

2

3

4

5

6

7

8

9

?

?

????????? 0???????????????? 1??????????????? 2??

?

地址如何計算?

所謂按行優(yōu)先順序,就是將數(shù)組元素按行向量的順序存儲,第個行向量存儲在第個行向量之后。

下面我們計算二維數(shù)組中任一元素A[i][j]的存儲地址,設(shè)每個數(shù)組元素所占空間為個連續(xù)字節(jié)。顯然,A[i][j]是第個行向量B[i]中的第個元素。

?

?

1

2

3

4

5

6

7

8

9

?

????????? 0?????????????? ??1??????????????? 2??

?

在A[i][j]之前的元素個數(shù)為u,分別是A[0][0]A[0][1]A[0][2],…,A[0][n]A[1][0],A[1][1],A[1][2],…,A[1][n],…,A[i-1][0]A[i-1][1]A[i-1][2],…,A[i-1][n],A[i][0],A[i][1],A[i][2],…,A[i][j-1]

設(shè)每個數(shù)組元素所占空間為個連續(xù)字節(jié)

Loc(A[i][j])=Loc(A[0][0])+u*C

u=?

前i行(第0行到第i-1行)(每行n個元素)的元素個數(shù)+第i行的元素個數(shù)(A[i][0]到A[i][j-1])

因此,u=i*n+j

Loc(A[i][j])=Loc(A[0][0])+u*C

=Loc(A[0][0])+(i*n+j)*C

按列優(yōu)先存儲

?

?

1

2

3

4

5

6

7

8

9

?

?

????????? 0???????????????? 1??????????????? 2??

?

地址如何計算?

在A[i][j]之前的元素個數(shù)為v,分別是A[0][0]A[1][0]A[2][0],…,A[m][0]A[0][1],A[1][1],A[2][1],…,A[m][1],…,A[0][j-1]A[1][j-1]A[2][j-1],…,A[m][j-1],A[0][j],A[1][j],A[2][j],…,A[i-1][j]

設(shè)每個數(shù)組元素所占空間為個連續(xù)字節(jié)

Loc(A[i][j])=Loc(A[0][0])+v*C

v=?

前j列(第0列到第j-1列)(每列m個元素)的元素個數(shù)+第j列的元素個數(shù)(A[0][j]到A[i-1][j])

因此,v=j*m+i

Loc(A[i][j])=Loc(A[0][0])+v*C

=Loc(A[0][0])+(j*m+i)*C

高維數(shù)組

按行優(yōu)先:“左”下標優(yōu)先,即第一(最左)下標的下標值較小的元素較先存儲,第一個下標值相同者,按第二下標優(yōu)先存儲,對任意的k>1,對第1~(k-1)維相同者,先存儲第k維中下標值較小者。

按列優(yōu)先:“右”下標優(yōu)先(最后一維下標為最右),先存儲第n維下標值較小者,第n維下標值相同者,先存儲第n-1維下標值較小者。

三維數(shù)組D[3][3][4]的順序存儲次序是

元素表示為D[i][j][k]??? 其中,0≤i≤2,0≤j≤2,0≤k≤3,

?

可以把它看作一維數(shù)組

B1[3]= { D[0][3][4],D[1][3][4],D[2][3][4]}

?

?

?


D[0][3][4]

i=0

?

D[0][0][0],D[0][0][1],D[0][0][2],D[0][0][3]

D[0][1][0],D[0][1][1],D[0][1][2],D[0][1][3]

D[0][2][0],D[0][2][1],D[0][2][2],D[0][2][3]

?

D[1][3][4]

i=1

?

D[1][0][0],D[1][0][1],D[1][0][2],D[1][0][3]

D[1][1][0],D[1][1][1],D[1][1][2],D[1][1][3]

D[1][2][0],D[1][2][1],D[1][2][2],D[1][2][3]

?

D[2][3][4]

i=2

?

D[2][0][0],D[2][0][1],D[2][0][2],D[2][0][3]

D[2][1][0],D[2][1][1],D[2][1][2],D[2][1][3]

D[2][2][0],D[2][2][1],D[2][2][2],D[2][2][3]

?

?

For? x=0? to?2?do

?? For? y=0? to?2? do

????? For? z=0?to? 3? do

D[i][j][k]的地址:

Loc(D[i][j][k])=Loc(D[0][0][0])+w*C

第一個下標的變化:0i-1,共i*3*4個元素

第一個下標為i時,第二個下標的變化:0j-1,共j*4個元素

第一個下標為i,第二個下標為j時,第三個下標的變化:0k-1,共k個元素

w= i*3*4+j*4+k

Loc(D[i][j][k])=Loc(D[0][0][0])+w*C

=Loc(D[0][0][0])+(i*3*4+j*4+k)*C

?

For? z=0?to? 3? do

?? For? y=0? to?2? do

????? For? x=0?to? 2? do

?

?

?

?

j=0

j=1

j=2

?

D[3][3][0]

k=0

?

D[0][0][0],D[1][0][0],D[2][0][0]

D[0][1][0],D[1][1][0],D[2][1][0]

D[0][2][0],D[1][2][0],D[2][2][0]

j=0

j=1

j=2

?

?


D[3][3][1]

k=1

?

D[0][0][1],D[1][0][1],D[2][0][1]

D[0][1][1],D[1][1][1],D[2][1][1]

D[0][2][1],D[1][2][1],D[2][2][1]

j=0

j=1

j=2

?

?


D[3][3][2]

k=2

?

D[0][0][2],D[1][0][2],D[2][0][2]

D[0][1][2],D[1][1][2],D[2][1][2]

D[0][2][2],D[1][2][2],D[2][2][2]

j=0

j=1

j=2

?

?


D[3][3][3]

k=3

?

D[0][0][3],D[1][0][3],D[2][0][3]

D[0][1][3],D[1][1][3],D[2][1][3]

D[0][2][3],D[1][2][3],D[2][2][3]

?

For? z=0?to? 3? do

?? For? y=0? to?2? do

????? For? x=0?to? 2? do

D[i][j][k]的地址:

Loc(D[i][j][k])=Loc(D[0][0][0])+w*C

第三個下標的變化:0k-1,共k*3*3個元素

第三個下標為k時,第二個下標的變化:0j-1,共j*3個元素

第三個下標為k,第二個下標為j時,第一個下標的變化:0i-1,共i個元素

w= k*3*3+j*3+i

?

Loc(D[i][j][k])=Loc(D[0][0][0])+w*C

=Loc(D[0][0][0])+(k*3*3+j*3+i)*C

?

?

n維數(shù)組

For? =0? to? ??do

?? For? =0? to? ??do

?????????? ? ? ? ?

????? For? =0? to? ??do

s = ?

的變化:0~-1,共****=*個元素

等于時,的變化:0~-1,共***=*個元素

等于時,等于時,的變化:0~-1,共***=*個元素

? ? ? ?

等于時,等于時,…,等于時,的變化:0~-1,共個元素

s=*+*+*++*+

??????????????

總結(jié)

以上是生活随笔為你收集整理的数组元素的地址计算问题(一维到高维)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。