經典資料結構之稀疏矩陣

2021-06-19 09:55:22 字數 2180 閱讀 3400

資料的儲存形式,不外乎鍊錶和類陣列兩種。使用二維陣列儲存矩陣,如果該矩陣是稀疏的,那麼會浪費很多空間。例如乙個4*4的對角陣,很明顯,只有主對角線上才有元素。那麼使用二維陣列儲存需要16個單位的 儲存空間。然而通過定義乙個結構體:

templatestruct sdatatype;

然後將其存放於陣列,所需要的空間則為[(sizeof(t) +2*sizeof(int))* 4]相對於[sizeof(t) * 16]來說,會節約很多空間。故我們通常使用這種方式儲存稀疏矩陣。然而矩陣的儲存,可以是基於行的,或者是基於列的。下面以基於行來示例**:

.h檔案

#ifndef csparsematrix_hhh

#define caparsematrix_hhh

#include #include templateclass csparsematrix;

templatestruct sdatatype;

template class csparsematrix

friend std::istream& operator>> (std::istream& in, csparsematrix& matrix)

return in;

} void madd(const csparsematrix& amatrix, csparsematrix& bmatrix);

void mtranpose(csparsematrix& amatrix);

private:

};templatecsparsematrix::csparsematrix(const int& maxsize = 10):

m_nmaxsize(maxsize)

templatecsparsematrix::~csparsematrix()

if(m_nlength >= m_nmaxsize)

else

} templatevoid csparsematrix::madd(const csparsematrix& amatrix, csparsematrix& bmatrix)

int ipos = m_parray[i].m_nrow * m_parray[i].m_ncol + m_parray[i].m_ncol;

int jpos = amatrix.m_parray[j].m_nrow * amatrix.m_parray[j].m_ncol + amatrix.m_parray[j].m_ncol;

if(ipos < jpos)else if(ipos > jpos)else

bmatrix.m_nlength ++;

} while(i < m_nlength)

i ++;

} while(j < bmatrix.m_nlength)

bmatrix.m_parray[j];

j ++; }}

templatevoid csparsematrix::mtranpose(csparsematrix& matrix)

matrix.m_ncols = m_nrows;

matrix.m_nrows = m_ncols;

matrix.m_nlength = m_nlength;

int* numberincol = new int[m_ncols + 1];

int* nextorderbyrow = new int[m_nrows + 1];

// initialize

for(int i = 0; i < m_ncols; i ++)

numberincol[i] = 0;

nextorderbyrow[1] = 0;

nextorderbyrow[0] = 0;

for(int i = 1; i <= m_nlength; i ++)

numberincol[m_parray[i].m_ncol] ++;

for(int j = 2; j <= m_ncols; j ++) // row start;

nextorderbyrow[j] = nextorderbyrow[j - 1] + numberincol[j - 1];

for(int i = 0; i < m_nlength; i ++)

}#endif

資料結構 稀疏矩陣

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

資料結構 稀疏矩陣

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

資料結構 稀疏矩陣

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