資料結構 陣列和稀疏矩陣

2021-10-01 05:57:47 字數 1946 閱讀 9984

稀疏矩陣

將陣列的所有元素儲存在一塊位址連續的記憶體單元中,這是一種順序儲存結構。

性質:1、陣列中的資料元素數目固定

2、陣列中的所有資料元素具有相同的資料型別

3、陣列中的每個資料元素都有一組唯一的下標

4、陣列是一種隨機儲存結構,可隨機訪問陣列中的任意資料元素。

一維陣列:

loc(ai)=loc(a1)+(i-1)*k

主要形式:對稱矩陣、上三角矩陣/下三角矩陣、對角矩陣 //都是方陣

對稱矩陣的壓縮儲存

k=i(i+1)/2+j 當i>=j時 ;

k=(j+1)j/2+i 當i>j時

三角矩陣的壓縮儲存

上三角矩陣:

k=i(2n-i+1)/2+j-i 當i<=j時;

k=n(n+1)/2 當i>j時

下三角矩陣:

k=i(i+1)/2+j 當i>=j時

k=(n+1)n/2

對角矩陣的壓縮儲存定義:乙個階數較大的矩陣中的非零元素個數s相對於矩陣元素的總個數t十分小時,即s《稀疏矩陣的三元組表示

稀疏矩陣中每乙個非零元素需由乙個三元組:(i,j,ai,j)唯一確定,稀疏矩陣中所有非零元素構成三元組線性表。

三元組順序表:

#define maxsize 100

typedef

struct

tupnode;

//三元組定義

typedef

struct

tsmatrix;

運用:1、從乙個二維矩陣建立其三元組表示

以行序方式掃瞄二維矩陣a,將其非零元素插入到三元組t的後面

約定:data域中表示的非零元素通常以行序為主序順序排列

void

createmat

(tsmatrix &t,elemtype a[m]

[n])

}}

2、增加元素,將乙個0元素改為非0值

bool value

(tsmatrix &t,elemtype x,

int i,

int j)

t.data[k]

.r=i;data[k]

.c=j;t.data[k]

.d=x;

t.nums++;}

return true;

}

3、將指定未知的元素值賦給變數

bool assign

(tsmatrix t,elemtype &x,

int i,

int j)

4、輸出三元組

void

dispmat

(tsmatrix t)

5、矩陣的轉置

(1)非高效演算法

void

trantat

(tsmatrix t,tsmatrix &tb)

}}

稀疏矩陣的十字鍊錶表示

每行所有節點鏈起來構成乙個帶行頭節點的迴圈單鏈表。以h[i]作為第i行的頭節點。

每列所有節點鏈起來構成乙個帶列頭節點的迴圈單鏈表。以h[i]作為第i列的頭節點。

行列頭節點可共享。

最後增加乙個總頭節點,並把所有行、列頭節點鏈起來構成乙個迴圈單鏈表。

#define m 3 

//矩陣行

#define n 4

//矩陣列

#define max ((m)>(n)?(m):(n))

//矩陣行列較大者

typedef

struct mtxn

tag;

}matnode;

//十字鍊錶節點型別宣告

資料結構 稀疏矩陣

稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...

資料結構 稀疏矩陣

簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...

資料結構 稀疏矩陣

稀疏矩陣時矩陣中的一種特殊情況,其非零元素的個數遠遠小於零元素個數。1.順序儲存 非零元素三元組的結構定義 struct triple 其中row代表行號,col代表列號,val用來儲存元素值 稀疏矩陣的順序儲存型別定義 struct smatrix m,n,t域分別用來儲存稀疏矩陣的行數,列數,非...