數組的尋址


兩種順序映象的方式

  1. 以行序為主序(低下標優先)

  2. 以列序為主序(高下標優先)

可用下標值隨機的訪問該數組的任意一個元素。

計算數組元素存儲地址的公式稱為尋址公式

一維數組尋址公式

若一維數組的下標下界為LB,上界為UB,每個元素占用S個存儲單元,第一元素(其下標為LB)的地址為LOC(LB),下標為i的數組元素A[i]的地址為LOC(i),則計算LOC(i)的尋址公式為:

\[LOC(i)=LOC(LB)+(i-LB)×S \]

例1:

若一維數組a[5], 每個元素占用4個存儲單元,第一元素(其下標為0)的地址為LOC(0) = 1000,下標為3的數組元素a[3]的地址為LOC(3),計算LOC(3)的地址:

\[LOC(3) = LOC(0) + (3-0)×4 = 1000+12 = 1012 \]

二維數組尋址公式

若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從1開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素占用S個存儲單元, 按行優先順序存放則尋址公式為:

\[LOC(i,j) = LOC(1,1) + [n×(i-1)+j-1]×S \]

若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從0開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素占用S個存儲單元, 按行優先順序存放則尋址公式為:

\[LOC(i,j) = LOC(0,0) + (n×i+j)×S \]

若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從1開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素占用S個存儲單元, 按列優先順序存放則尋址公式為:

\[LOC(i,j) = LOC(1,1) + [m×(j-1)+i-1]×S \]

若設二維數組A[m] [n],m、n分別表示數組的行數和列數 (從0開始),用Loc(i,j)表示數組元素A[i] [j]的地址,每個元素占用S個存儲單元, 按列優先順序存放則尋址公式為:

\[LOC(i,j) = LOC(0,0) + (m×j+i)×S \]

尋址 = 基址 + 所求位置前面所有元素的個數的地址

例1:

一個二維數組A,行下標的范圍是1到6,列下標的范圍是0到7,即6行8列,A[1…6] [0…7], 每個數組元素用相鄰的6個字節存儲,存儲器按字節編址。那么,這個數組的體積是 ( ) 個字節。

答:

\[Volume = m*n*L=(6-1+1)*(7- 0 +1)*6=48*6=288 \]

例2:

設數組a[0…59] [0…69]的基地址為2048,每個元素占2個存儲單元,若以行序為主序順序存儲,則元素 a[32,58]的存儲地址為 ( ) a[0…59] [0…69] = a[60] [70]

答:

​ 根據行優先公式

\[LOC(i,j) = LOC(0,0) + (n×i+j)×S \]

  得:

\[LOC(32,58)=2048+(32*70+58)*2=6644 \]

例3:

二維數組A[10] [20]采用列序為主方式存儲,每個元素占1個存儲單元,並且A[0] [0]的存儲地址是200,

​ 則A[6] [12]的地址是( ) 。A[6] [12]: 第7行第13列

答:

​ 根據行優先公式 (n代表總列數)

\[LOC(i,j) = LOC(0,0) + (n×i+j)×S \]

  得:

\[LOC(6,12)=200+(20*6+12)*1=332 \]

​ 根據列優先公式 (m代表總行數)

\[LOC(i,j) = LOC(0,0) + (m×j+i)×S \]

  得:

\[LOC(6,12)=200+(10*12+6)*1=326 \]

例4:

二維數組A[10..20] [5..10]采用行序為主方式存儲,每個元素占4個存儲單元,且A[10] [5]的存儲地址是 1000,則A[18] [9]的地址是 ( ) 。

​ 分析:A[10..20] [5..10] 等價於A[0…10] [0…5]等價於A[11] [6], 11行6列,A[18] [9] 等價於A[8] [4]

​ 根據行優先公式 (n代表總列數)

\[LOC(i,j) = LOC(0,0) + (n×i+j)×S \]

  得:

\[LOC(18,9)=LOC(8,4) = 1000+(6*8+4)*4=1208 \]

例5(附圖示):

數組A[0..5, 0..6]的每個元素占5個字節,將其按列優先次序存儲在起始地址為2000的內存單元中,則元素A[4] [4]的地址是 ()。

  1. A[0...5, 0...6] = A[6] [7] ,6行7列

  2. A[4] [4],5行5列

  3. 按列優先次序存儲:先把前4列存滿 (即4 x 6),再加上最后一列的4個元素,最后乘以元素所占字節加上基址

\[(4 * 6+4)* 5 + 2000 = 2140 \]

image-20201230222957177

  1. 按行優先次序存儲:先把前4行存滿 (即4 x 7),再加上最后一行的4個元素,最后乘以元素所占字節加上基址

\[(4 * 7+4)*5 + 2000 = 2160 \]

image-20201230223033720

注意

  1. 行序為主方式存儲就是按順序先把一行存儲滿后再換下一行,列序為主方式存儲就是按順序先把一列存儲滿后再換下一列。
  2. 若不是N階方陣 則按 行序 或者 列序 的尋址可能不會相同


免責聲明!

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



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