數組元素存儲地址的計算_第1頁
數組元素存儲地址的計算_第2頁
數組元素存儲地址的計算_第3頁
數組元素存儲地址的計算_第4頁
數組元素存儲地址的計算_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數組元素存儲地址的計算一維數組設一維數組An存放在n個連續(xù)的存儲單元中,每個數組元素占 一個存儲單元(不妨設為 C個連續(xù)字節(jié)).如果數組元素A0的首地址是L,則A1的首地址是L+C , A2的首地址是L+2C,依次類推,對于0 i n 1有:Loc(Ai) Loc(A0) i*C二維數組二維數組的每個元素含兩個下標,如果將二維數組的第一個下標號,理解為行號,第二個下標理解為列號,然后按行列次序排列個元素, 則二維數組呈陣列形狀。例如a11 a12a1nAa21 a22a2nam1am2amn它是個行號為1m ,列號為1n的二維數組元素陣列如何保存二維數組?首先要確定個順序Oa00 a01&am

2、p;02B 0a11盹a20a21a22a00 a01 a02a10 a11 a12a20 a21 a22a00a01a020a11a12a20a21a22Ba00a01a02ai0ai1ai2a20<Ja21a22a00a0ia02a00a01a02a00a01302Bai0aii3,2Ba10311a12Ba10311312a20a21a22a20a21a22a20a21322a00ai0 a20a01a11a21a02ai2a22300301302300h-30130200S01302a10311312BO&s£1312B310S12321322320沐32232

3、0321300301302300301 302a10311 312B310311312320321322320321322320 310321300311322 301312 302設count為數組B中元素的個數,則 count=9按行優(yōu)先存儲123456789a000)1a02a10011a12a20a21a227,按列優(yōu)先存儲123456789a00a10a20a01311a21a02a12a22VVY地址如何計算?所謂按行優(yōu)先順序,就是將數組元素按行向量的順序存儲, 第i 1個行向量存儲在第i個行向量之后。F面我們計算二維數組Am n中任一元素Aij的存儲地址,設每個數組元素所占空間為

4、C個連續(xù)字節(jié)。顯然,Aij是第i個行向量Bi中的第j個元素。123456789aooao1ao2310311a12920a21a22'V"八y'第0行第1行第2行在Aij之前的元素個數為u,分別是AOO , AO1,AO2,AOn,A10 ,A11 ,A12,A1n,Ai-10, Ai-11,Ai-12,Ai-1n, Ai0 , Ai1,Ai2,Aij-1設每個數組元素所占空間為C個連續(xù)字節(jié)。Loc (Aij)二Loc (AOO ) +u*Cu二?前i行(第0行到第i-1行)(每行n個元素)的元素個數+第i行的元素個數(Ai0到Aij-1因此,u=i*n+j)+u*C

5、Loc (Aij ) =Loc (AOO=Loc ( AOO)+ (i*n+j ) *C按列優(yōu)先存儲123456789a00a10a20a01311a21a02a12a22地址如何計算?在Aij之前的元素個數為V,分別是A00, A10,A20,Am0,A01,A11 ,A21,Am1,A0j-1,A1j-1,A2j-1,Amj-1,A0j,A1j,A2j,Ai-1j設每個數組元素所占空間為C個連續(xù)字節(jié)。Loc( Aij)二Loc (A00 )+v*Cv=?前j列(第0列到第j-1列)(每列m個元素)的元素個數+第j列的元素個數(A0j到 Ai-1j)因此,V二j*m+iLoc( Aij )=

6、Loc(A00 )+v*C=Loc(A00 ) + (j*m+i ) *C高維數組按行優(yōu)先:“左”下標優(yōu)先,即第一(最左)下標的下標值較小的元素較先存儲,第一個下標值相同者,按第二下標優(yōu)先存儲,對任意的k>1,對第1( k-1 )維相同者,先存儲第k維中下標值較小者。按列優(yōu)先:“右”下標優(yōu)先(最后一維下標為最右)先存儲第n維下標值較小者,第n維下標值相同者,先存儲第n-1維下標值較小者。三維數組D334的順序存儲次序是元素表示為Dijk其中,0 <i <2 , 0 <j <2 ,0 <k <3,可以把它看作一維數組D034i=0B13 = D034,

7、D134, D234 000, D001, D 002, D 003010, D011, D012, D013020, D021, D 022, D 023D134i=11 00, D101, D 1 02, D 1 03:D 1 10, D111, D112, D 1 13D 1 20, D121, D 1 22, D 1 23D 2 00,D201,D 202,D 2 03D234i=2D210,D211,D212,D213D220,D221,D 222,D223For x=0to 2doFor y=0 todoFor z=0to3 doDijk的地址:Loc (Dijk)=Loc(D00

8、0)+w*C第一個下標的變化:0 到 i-1,共 i*3*4個元素第一個下標為i時,第二個下標的變化:0到j-1,共j*4個元素第一個下標為i,第二個下標為j時,第三個下標的變化:0到k-1 ,共k個元素w= i*3*4+j*4+kLoc( Dijk)=Loc ( D000)+w*C=Loc(D000)+( i*3*4+j*4+k)*CFor z=0 to 3doFor y=0 to2 doFor x=0 to 2 doop £00=z JojG庇庇a,£乙山'£遼HoldG "庇a4gl山Hold2=G Ko庇a4go山4g0HoldL=0=k

9、 乙庇a'乙乙山'乙乙Holdk "庇a七U山'遼MHold2=L=k Ko庇a七0山'遼0Hold0=門乙庇a'門乙山'門遼Hold庇a U山4 d 1Hold2=門0庇a'門0山'門0HoldO=£££血©G2=1=0=0乙庇G '0乙山'0遼HoldoKi Ma 'oU 山 4olHold0胡0Ko 庇G 4oo 山 4ooHoldoGGa乙乙E乙Lg30g 比g k kg%03g Okg OOgFor y=0 to 2doFor x=0 to2 do

10、Loc (Dijk)二Loc(D000)+w*C第三個下標的變化:0到k-1,共k*3*3個元素第三個下標為k時,第二個下標的變化:0到j-1,共j*3個元素第三個下標為k,第二個下標為j時,第一個下標的變化:0到i-1 ,共i個元素w= k*3*3+j*3+iLoc( Dijk)=Loc ( D000)+w*C=Loc (D000) + (k*3*3+j*3+i) *Cn 維數組 amim2 mnFor l1=0 tom1 1doFor I2 =0 tom21 doFor ln=0 tomn 1 doLoc(ii,i2, ,in)Loc(0,0,0) s*CnI1 的變化:0 i1-1,共 i1*m2*m3*mn 二 i1* mp 個元素p 2m4 *in -1 ,nl1等于h時,2的變化:0 i2-1,共i2* m3*mn二i2* mp個元素p 3ll等于il時,I2等于i2時,l3的變化:0i3-1 ,共i3*n*mn= i3*mp個元素P 4ll等于ii時,I2等于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論