資料結構 陣列與特殊矩陣

2021-10-24 14:54:43 字數 2281 閱讀 8502

特殊矩陣

稀疏矩陣

廣義表陣列是相同資料型別的元素按照一定順序排列的集合。

一維陣列的實質就是線性表,儲存方法同順序表。假設一維陣列a = (a1, a2, a3, …, ai,…, an),每個元素佔l個儲存單元,則元素a[i]的儲存位址為

loc(a[i]) = loc(a[1]) + (i - 1)* l

二維陣列可以有兩種儲存方式,行序主序和列序主序。

假設二維陣列為a(m*n),每個元素佔l個儲存單元,則元素a[i][j]的儲存位址如下。

按行儲存

loc(a[i][j]) = loc(a[1][1]) + (n*(i - 1)+(j - 1))*l;

按列儲存

loc(a[i][j]) = loc(a[1][1]) + (m*(j - 1)+(i - 1))*l;

假設三維陣列a(rmn),每個元素佔l個儲存單元,則元素a[i][j][k]的儲存位址為

loc(a[i][j][k]) = loc(a[1][1][1]) + ((i - 1)*m *n + (j - 1)*n + (k - 1)) * l

三角矩陣分為上三角矩陣和下三角矩陣。

上三角矩陣:指矩陣的主對角線(不包括對角線)下方的元素均為0或常數c。上三角矩陣共有n(n+1)/2個元素。

上三角矩陣在一維陣列中按行序為主序的儲存位址為:

loc(a[i][j] = loc(a[1][1]) + 前i-1行非零元素 + 第i行中a[i][j]前非零元素 = loc(a[1][1]) + (2n-i+2)*(i-1)/2 + (j - i)。

下三角矩陣在一維陣列中按行序為主序的儲存位址為:

loc(a[i][j]) = loc(a[1][1]) + 前i-1行非0元素 + 第i行中a[i][j]前非零元素 = loc(a[1][1]) + i *(i - 1)/2 + (j - 1) 。

對角矩陣是指矩陣中所有有效元素均集中在以主對角線為中心的帶狀區域中。

三對角矩陣

三對角矩陣是指三條對角線以外的元素均為零或者常數,且第一行和最後一行只有兩個有效元素,其他行均有三個非零元素。

三對角矩陣,元素a[i][j]在一維陣列中按行序為主序的儲存位址為:

loc(a[i][j]) = loc(a[1][1]) + 3*(i - 1) - 1 + (j - i + 1)

矩陣中只有極少的非零元素,而且分布也不規律,如果非零元素個數只佔矩陣元素總數的25%~30%或低於這個百分數時,這樣的矩陣稱為稀疏矩陣。

係數矩陣的壓縮儲存一般有兩類:三元組順序表(順序結構)和十字鍊錶(鏈式結構)。

三元組順序表

以順序儲存結構來表示三元組表,成為係數矩陣的三元組順序表。對於稀疏矩陣的非零元素來說,行號、列號以及元素值三項值可以唯一地確認該元素。三元組順序表中的三元恰好反映了這三項值。(row, col, value)

在順序表中,除了儲存表示元素的三元組外,還應該儲存稀疏矩陣的行數、列數、以及非零元素的個數。

十字鍊錶

當矩陣的非零元素個數和位置在操作過程中的變化較大時,就不太適宜採用順序儲存結構來儲存稀疏矩陣。此時,採用鏈式儲存結構來表示則更為恰當。

在鍊錶中,每個非零元素由乙個結點來表示。結點結構如下:

線性表要求它的每個元素必須是結構上不可再分的單個元素,而廣義表中的資料元素可以是單個元素,也可以又是乙個廣義表。

廣義表是n(n>=0)個元素的有限序列,記作ls=(d1, d2, …, dn)。

其中:di可以為原子項,也可以為廣義表,n為廣義表的長度。

原子:是作為結構上不可分割的成分,它可以是乙個數或乙個結構。

子表:若廣義表ls中的某乙個元素di本身也是乙個廣義表,則稱di為廣義表ls的子表。

長度:廣義表ls中元素的個數為ls的長度(length)。

空表:表內沒有元素,長度為0的廣義表稱為空表。

表頭與表尾:ls不為空時,稱d1為表頭,稱其餘元素組成的子表為表尾。顯然,廣義表的表尾一定是廣義表,但表頭不一定。

深度:廣義表ls的深度depth(ls)相當於廣義表中表示式括號的最大巢狀層數。

遞迴表:廣義表ls中某元素包含其自身,則稱ls為遞迴表。

資料結構 特殊矩陣

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

資料結構 壓縮特殊矩陣

矩陣是一種常用的數學物件,一般情況下,小的矩陣我們可以直接用二維陣列直觀方便地儲存,但是在科學與工程計算問題中常會遇到較高階數的矩陣,並且矩陣中會出現大量零元素,或者矩陣中的元素呈某種規律分布。如果在這種情況下仍然採用二維陣列描述矩陣,看起來儲存密度為1,實際上卻占用了許多單元去儲存零元素或重複的非...

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

例證 例證 includeint main void 陣列都是順序儲存的,乙個挨著乙個,比如int a 5 int佔四個位元組,a 0 和a 1 連續,因此差4個位元組。根據等差數列通項公式,有 loc a i loc a j i j size二維陣列也是順序儲存的,但是可以按照行儲存,也可以按照列...