資料結構 特殊矩陣

2021-09-23 08:21:30 字數 3175 閱讀 5811

在乙個n階方陣a中,若元素滿足下述性質:

則稱a為對稱矩陣。

(1)只要儲存矩陣中上三角或下三角中的元素,讓每兩個對稱的元素共享乙個儲存空間,這樣,能節約近一半的儲存空間

(2)元素的個數為:n(n

上三角矩陣

矩陣下三角部分(不包括對角線)元素全為c(c可以為0)的矩陣

下三角矩陣

矩陣上三角部分(不包括對角線)元素全為0的矩陣

主對角線之外的元素都為0

j;主對角線之下的對角線(稱低對角線)即 i=j

+1i=j+1

i=j+1;

主對角線之上的對角線(稱高對角線)即 i=j

−1i=j-1

i=j−1。

這三條對角線上的元素總數為 3n−

23n-2

3n−2

已知矩陣 a 中元素$a_,其中 1

<=i

,j<=n

1<=i,j<=n

1<=i

,j<=n

。(1)若陣列 b 的下標 k

kk 從 0 開始儲存,那麼

k =2

+3(i

−2)+

j−i+

2−1=

2i+j

−3k=2+3(i-2)+j-i+2-1=2i+j-3

k=2+3(

i−2)

+j−i

+2−1

=2i+

j−3i=f

loor

[(k+

1)/3

+1]i=floor[(k+1)/3+1]

i=floo

r[(k

+1)/

3+1]

j =k

−2i+

3j=k-2i+3

j=k−2i

+3(2)若陣列 b 的下標 k

kk 從 1 開始儲存,那麼

k =2

+3(i

−2)+

j−i+

2=2i

+j−2

k=2+3(i-2)+j-i+2=2i+j-2

k=2+3(

i−2)

+j−i

+2=2

i+j−2i=

floo

r[k/

3+1]

i=floor[k/3+1]

i=floo

r[k/

3+1]

j =k

−2i+

2j=k-2i+2

j=k−2i

+2在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分布沒有規律時,則稱該矩陣為稀疏矩陣

三元組表示法

三元組為乙個長度為n,表內每個元素都有3個分量的線性表,其3個分量分別為值,行下標和列下標。元素結構體定義如下:

typedef

struct

trimat;

在程式中如果要定義乙個含有maxterms個非零元素的稀疏矩陣,則

trimat trimat[maxterms+1]

;

簡便起見,也可以不使用結構體直接用二維陣列來定義三元組

int trimat[maxterms+1]

[3];

偽位址表示法

typedef

struct

trimat;

其中,address的計算方法為

address=

n(i-1)

+j;

在程式中如果要定義乙個含有maxterms個非零元素的稀疏矩陣,則

trimat trimat[maxterms+1]

;

簡便起見,也可以不使用結構體直接用二維陣列來定義偽位址

int trimat[maxterms+1]

[2];

鄰接表鄰接表表示法將每一行的非零元素串連成乙個鍊錶,鍊錶結點中有三個分量,分別表示該結點對應列號、元素值及指向下乙個結點的指標。

十字鍊錶

矩陣的每一行用乙個帶頭結點的鍊錶表示,每一列也用乙個帶頭結點的鍊錶表示,其中最左邊和最上邊是頭結點陣列,不儲存資料資訊

左上角的結點可以視為整個十字鍊錶的頭結點,它有5個分量,分別儲存矩陣的行數、列數、非零元素個數以及指向兩個頭結點陣列的指標

十字鍊錶結點中除頭結點以外的結點就是儲存矩陣非零元素相關資訊的普通結點。

資料結構 壓縮特殊矩陣

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

資料結構 陣列與特殊矩陣

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

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

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