資料結構 稀疏矩陣的壓縮儲存

2021-10-10 16:31:31 字數 2241 閱讀 7423

目錄

關於矩陣

稀疏矩陣

行優先和列優先

稀疏矩陣的壓縮儲存

在矩陣中,若數值為0的元素數目遠遠多於非0元素的數目,並且非0元素分布沒有規律時,則稱該矩陣為稀疏矩陣;與之相反,若非0元素數目佔大多數時,則稱該矩陣為稠密矩陣。

如這個稀疏矩陣,這個矩陣占用了6*7的元素型別大小,但是裡邊有大量的0,,即有用資訊很有限,因此我們可以只提取其有用資訊來對其進行壓縮。得到乙個座標及其元素值的表

舉例說明:這裡有乙個陣列

行優先排列是這樣的

列優先排列是這樣的

tupnode 結構體 是非零元素的座標和值。

tsmatrix 結構體 是乙個稀疏矩陣的表示,其中tupnode data[maxsize]裡邊儲存了壓縮的稀疏矩陣資訊。另外記錄了該稀疏矩陣的行數、列數以及非零元素個數等資訊。

此外需要特別注意的是稀疏矩陣的壓縮是按行優先儲存的還是按列優先儲存的一定要明確,因為儲存方式是貫穿始終的。比如,如果在提取壓縮後的稀疏矩陣的資料的時候不知道是行優先還是列優先的話,就無法提取資料。

#include #define m 6

#define n 7

#define maxsize 100

typedef int elemtype;

typedef struct tupnode;

typedef struct tsmatrix;

int a[m][n] = ,

, ,, ,

,};void creatmat(tsmatrix& t, elemtype* a, int m, int n);

void printmat(tsmatrix t);

bool value(tsmatrix& t, elemtype e, int i, int j);

bool assign(tsmatrix& t, elemtype& e, int i, int j);

int main()

void creatmat(tsmatrix &t, elemtype *a,int m,int n)//

} }}void printmat(tsmatrix t)

}bool value(tsmatrix& t, elemtype e, int i, int j)//在矩陣的(i,j)位置元素改為e,注意如果e為0就不要亂插了

//}//if (!flag)//沒有查到

// // t.data[k].r = i;

// t.data[k].c = j;

// t.data[k].elem = e;

// t.nums++;

//}while (k < t.nums && t.data[k].r < i)k++;//先找到那一行(creatmat函式是行優先,因此這裡查詢也應該是行優先)

while (k < t.nums && t.data[k].r == i && t.data[k].c= k; k1--)//往後移一位

t.data[k].r = i;

t.data[k].c = j;

t.data[k].elem = e;

t.nums++;

} return true;

}bool assign(tsmatrix& t, elemtype& e, int i, int j)//將制定位置的元素值賦給變數e

被注釋掉的部分是錯誤寫法,想想為什麼不對。

區別就在於

while (k < t.nums && t.data[k].r < i)k++;//先找到那一行(creatmat函式是行優先,因此這裡查詢也應該是行優先)

while (k < t.nums && t.data[k].r == i && t.data[k].ct.data[k].r < i

t.data[k].c < j

這兩個限制條件,如果沒有這兩個限制條件就會變成。

資料結構 對稱矩陣的壓縮儲存與稀疏矩陣的轉置

對稱矩陣 symmetric matrix 平時儲存一般矩陣我們都是用的二維陣列,但我們可以看出對稱矩陣上三角與下三角的內容是一樣的。為了節省空間我們採取壓縮儲存的方式,將對稱矩陣的上三角或者下三角的資料儲存在乙個一維陣列裡面。如果對稱矩陣為 n n的矩陣,我們可以知道壓縮儲存的一維陣列的大小為 n...

稀疏矩陣的壓縮儲存

include include using namespace std templateclass sparsematrix sparsematrix 訪問稀疏矩陣中row行col中的元素 t access int row,int col it return invalid for size t i...

稀疏矩陣的壓縮儲存

稀疏矩陣的壓縮儲存 實現稀疏矩陣壓縮儲存,並實現矩陣轉置和求和。輸入矩陣時,首先需要輸入非零元素的個數,然後分別輸入矩陣的 行號,列號和值。輸完2個矩陣後,自動進行計算第乙個矩陣的轉置以及兩個矩陣的和。例如 輸入如下 100 90 5 矩陣的行數為100,列數為90,共5個非零元素。1 10 100...