資料結構 陣列和特殊矩陣的儲存

2021-09-26 10:46:22 字數 2592 閱讀 1669

例證:

例證:

#includeint main(void)

陣列都是順序儲存的,乙個挨著乙個,比如int a[5] = 。int佔四個位元組,a[0]和a[1]連續,因此差4個位元組。根據等差數列通項公式,有

loc(a[i]) = loc(a[j]) + (i-j)*size
二維陣列也是順序儲存的,但是可以按照行儲存,也可以按照列儲存。演算法和上面類似,主要是看差距多少個元素。比如陣列a[3][5],那麼a[1][1]和a[2][3]差距多少呢?如果按照行儲存,也就是一行一行存,那麼差2-1=1行,一行5個數,在加上3-1=2,共差7個元素,所以a[2][3]位址等於a[1][1]位址加上7乘以元素size

對於乙個對稱矩陣,假設張下面這樣

因為是對稱的,所以只存上三角或者下三角就夠了,原來一共n*n個元素,用一維陣列存只需要1+2+3+4+...+n個元素就夠了。

假設存下三角區域,那麼第i行第j列是一維陣列中第幾個元素呢?

第i行第j列(i>=j),1+2+3+4+...+(i-1)+j
可以這麼想,第i行第j列前邊有幾個元素?第一行1個,第二行2個,第i行第j列,前邊有i-1行,所以前邊有1+2+3+...(i-1)個,再看本行,前邊有j-1個,所以這個元素前邊有1+2+3+4+...+(i-1)+j-1個元素,所以這個元素是第1+2+3+4+...+(i-1)+j個,如果陣列是從0開始,那麼下標就是1+2+3+4+...+(i-1)+j-1,那麼i<=j的時候就把i和j交換下就行。

計算方法和上面類似,一維陣列長度是(1+2+3+4+...+n)+1,為啥要加1,因為三角矩陣另乙個角是個常數(一般是0,當然也可以是別的)。同理,i>=j時,第i行第j列前邊共有1+2+3+4+...+(i-1)+j-1個元素,所以這個元素是第1+2+3+4+...+(i-1)+j個,當i上三角和上面類似,一維陣列長度仍然是(1+2+3+4+...+n)+1,只是第一行有n個,第2行有n-1個,第i行有n-i+1個,當i<=j時,前邊有[n+(n-1)+(n-2)+...+(n-(i-1)+1)]+(j-i)個元素,所以這個元素是第[n+(n-1)+(n-2)+...+(n-(i-1)+1)]+(j-i)+1個。當i>j時,即是下三角區域,就存到最後,即第(1+2+3+4+...+n)+1個元素。

對於稀疏矩陣(大多數元素是0的),只儲存非零元素,比如這個矩陣就是這麼存的。

當然,還要儲存陣列的行數,列數和非零元素個數,如下

三對角矩陣長這樣子:

只儲存主對角線及其上、下兩側次對角線上的元素,其他的零元素一律不儲存。對乙個n*n的三對角方陣a,元素總數有n*n個,而其中非零的元素共有3*n-2個。因此,儲存三對角矩陣時最多隻需儲存3*n-2個元素。

這個不是很好找規律,由於是線性的,可以用待定係數法求出。

資料結構 陣列與特殊矩陣

特殊矩陣 稀疏矩陣 廣義表陣列是相同資料型別的元素按照一定順序排列的集合。一維陣列的實質就是線性表,儲存方法同順序表。假設一維陣列a a1,a2,a3,ai,an 每個元素佔l個儲存單元,則元素a i 的儲存位址為 loc a i loc a 1 i 1 l 二維陣列可以有兩種儲存方式,行序主序和列...

資料結構 特殊矩陣

在乙個n階方陣a中,若元素滿足下述性質 則稱a為對稱矩陣。1 只要儲存矩陣中上三角或下三角中的元素,讓每兩個對稱的元素共享乙個儲存空間,這樣,能節約近一半的儲存空間 2 元素的個數為 n n 上三角矩陣 矩陣下三角部分 不包括對角線 元素全為c c可以為0 的矩陣 下三角矩陣 矩陣上三角部分 不包括...

資料結構 特殊矩陣的儲存壓縮及解壓

特殊矩陣的儲存壓縮及解壓 define crt secure no warnings define empty queue error 999999 include include include include include define maxlen 100 typedef int elemt...