❶ 數據結構、數組存儲的地址怎麼計算
數組存儲地址的計算:
以二維數組為例,其他的依次類推
假設起始下標從0開始,按行存儲(總共有M行,N列):
A[i][j]=A[0][0]+(i*N+j)*L
這地方的L是數組中的一個元素所佔的存儲空間。
或:
即使A[8][5]前面有多少個元素,
行下標i從1到8,列下標j從1到10,所有A[8][5]之前共有n7*10+4(74)個元素,
每個元素的長度為3個位元組,故共有3*74=222個位元組
首地址是SA,則A[8][5]地址是SA+222
(1)數組存儲地址計算公式無0行0列擴展閱讀:
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。
❷ 簡單數組的地址的計算
根據你的表達來看該數組起始下標是從1開始而非0開始的。所以這樣分析:
4*5*6個元素的數組可以看成一個由4個元素組成的數組,即a[1]、a[2]、a[3]、a[4],每個數組元素又是一個二維數組,每個數組元素大小是5*6*2=60個存儲單元,也就是每個第一層數組元素a[i](i=1、2、3、4)的起始地址為1000+ (i-1)*60。按照這個規律往下推理,a[i][j](i=1、2、3、4,j=1、2、3、4、5)的起始地址為1000+ (i-1)*60+(j-1)*12,最後a[i][j][k]的地址應該為1000+ (i-1)*60+(j-1)*12+(k-1)*2 (i=1、2、3、4,j=1、2、3、4、5,k=1、2、3、4、5、6) ,所以a[2][3][4]按行優先存儲的地址是1000+(2-1)*60+(3-1)*12+(4-1)*2
同理分析可得a[i][j][k]按列優先存儲的地址是1000+(k-1)*40+(j-1)*8+(i-1)*2 (k=1、2、3、4、5、6,j=1、2、3、4、5,i=1、2、3、4) ,a[2][3][4]按列優先存儲的地址是1000+(4-1)*40+(3-1)*8+(2-1)*2
PS:如果數組起始下標是從0開始的,那麼a[i][j][k]按列優先存儲的地址是1000+k*40+j*8+i*2
,按行優先存儲的地址是1000+ i*60+j*12+k*2
❸ 數據結構 數組存儲地址的計算
數組存儲地址的計算:以二維數組為例,其他的依次類推:
假設起始下標從0開始,按行存儲(總共有M行,N列):
A[i][j]=A[0][0]+(i*N+j)*L
這地方的L是數組中的一個元素所佔的存儲空間
例如:
第一個元素的地址「值」就是數組的地址「值」,只不過類型不一樣,強轉一下就可以了。
int ary[5];
int* pInt = &ary[0];
int (*pAry)[5] = &ary;
printf("First: %p ", pInt);
printf("Array: %p ", pAry);
(3)數組存儲地址計算公式無0行0列擴展閱讀:
一個數組中的所有元素具有相同的數據類型(在C、C++、Java、pascal中都這樣。但也並非所有涉及數組的地方都這樣,比如在Visual Foxpro中的數組就並沒這樣的要求)。當然,當數據類型為 Variant 時,各個元素能夠包含不同種類的數據(對象、字元串、數值等等)。可以聲明任何基本數據類型的數組,包括用戶自定義類型和對象變數。
❹ 二維數組存儲地址計算
i-p是在a[i][j]之前的行數,每一行有n列,並且是從第零行開始,而a[i][j]在第i行第j列,故再加上j-p,你畫個表就知道了
❺ 四維數組存儲地址計算公式
四維數組存儲地址計算公式:A[i][j]=A[0][0]+(i*N+j)*L。
A[8][5]前面有多少個元素。行下標i從1到8,列下標j從1到10,所有A[8][5]之前共有n7*10+4(74)個元素。每個元素的長度為3個位元組,故共有3*74=222個位元組。
三維數組A(ijk)按「行優先順序」存儲,其地址計算函數為:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
簡介
通過一個整型下標可以訪問數組的每一個值。數組維數是指在多維數組之中採用一系列有序的整數來標注,整數列表之中整數始終相同的個數。在資料庫中,數組維數與表中屬性數量有關,屬性越多,數組維數越大。計算機中的欄位屬性、資源特性和那些讀取與修改的許可權。例如:文件屬性、用戶的屬性。
❻ 數據結構,求這個數組的地址計算公式
第十一題
❼ 能詳細描述一下順序存儲的數組元素的存放地址的計算方法嗎
假設數組各維的下界是不是1,二維數組A(mn)按「行優先順序」存儲在內存中,假設每個元素佔用d個存儲單元。元素a(ij)的存儲地址應是數組的基地址加上排在a(ij)前面的元素所佔用的單元數。因為a(ij)位於第i行、第j列,前面i-1行一共有(i-1)×n個元素,第i行上a(ij)前面又有j-1個元素,故它前面一共有(i-1) ×n+j-1個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同樣,三維數組A(ijk)按「行優先順序」存儲,其地址計算函數為:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
上述討論均是假設數組各維的下界是1,更一般的二維數組是A[c1..d1,c2..d2],這里c1,c2不一定是1。a(ij)前一共有i-c1行,二維數組一共有d2-c2+1列,故這i-c1行共有(i-c1)*(d2-c2+1)個元素,第i行上a(ij)前一共有j-c2個元素。
因此,a(ij)的地址計算函數為:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。
例如,在C語言中,數組各維下標的下界是0,因此在C語言中,二維數組的地址計算公式為:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
❽ 數據結構數組存儲地址的計算
應該對你有幫助的!數組存儲地址的計算:以二維數組為例,其他的依次類推:
假設起始下標從0開始,按行存儲(總共有M行,N列):
A[i][j]=A[0][0]+(i*N+j)*L
這地方的L是數組中的一個元素所佔的存儲空間