資料結構 稀疏矩陣

2021-08-22 19:17:20 字數 1857 閱讀 4962

稀疏矩陣時矩陣中的一種特殊情況,其非零元素的個數遠遠小於零元素個數。

1.順序儲存

//非零元素三元組的結構定義

struct triple

/*其中row代表行號,col代表列號,val用來儲存元素值*/

//稀疏矩陣的順序儲存型別定義

struct smatrix

/*m,n,t域分別用來儲存稀疏矩陣的行數,列數,非零元素個數,sm陣列域用來順序儲存每個三元組元素。*/

2.鏈結儲存(1)帶行指標向量的鏈結儲存

//三元組結點型別定義

struct triplenode

//帶行指標向量的鏈結儲存結構型別定義

struct lmatrix

/*lm向量用來儲存m個行單鏈表的表頭指標*/

(2)十字鏈結儲存

//結點型別定義

struct crossnode

/*down域用來儲存指向下同一列下乙個結點的指標,right域用來儲存指向同一行下乙個結點指標*/

//十字鏈結儲存結構型別定義

struct clmatrix

1.初始化運算

稀疏矩陣的儲存型別不同,其初始化過程也不同,對於smatrix型別物件,初始化過程為:

void initmatrix(struct smatrix* m)
對於lmatrix型別物件,初始化為:

void initmartix(struct smatrix* m)
對於clmatrix型別物件,初始化為:

void initmartix(struct smatrix* m)
2.稀疏矩陣的建立

對於smatrix型別儲存

void inputmartix(struct smatrix* m ,int m,int n)

}

對於十字鏈結儲存

void inputmatrix(struct clmatrix* m,int m,int n)

else

//把新結點鏈結到所在列單鏈表的末尾

cp = m->cm[col];

if(cp == null)

else

//輸入下乙個三元組

scanf("%d%d%d",&row,&col,&val);

}m->t = k;

}

3.稀疏矩陣的輸出

按三元組線性**式輸出,則對於採用順序儲存的稀疏矩陣,輸出演算法如下:

void outputmatrix(struct smatrix* m)

if(m->t != 0)

printf(")\n");

}

void outputmatrix(struct lmatrix* m)

printf(")\n");

}

資料結構 稀疏矩陣

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

資料結構 稀疏矩陣

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

資料結構 (稀疏矩陣)

使用三元組儲存乙個稀疏矩陣,函式實現稀疏矩陣的輸入,稀疏矩陣的輸出,稀疏矩陣的轉置,兩個稀疏矩陣的加法 include include include using namespace std define m 10 define n 10 typedef int datatype typedef s...