資料的儲存形式,不外乎鍊錶和類陣列兩種。使用二維陣列儲存矩陣,如果該矩陣是稀疏的,那麼會浪費很多空間。例如乙個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域分別用來儲存稀疏矩陣的行數,列數,非...