稀疏矩陣
將陣列的所有元素儲存在一塊位址連續的記憶體單元中,這是一種順序儲存結構。
性質: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域分別用來儲存稀疏矩陣的行數,列數,非...