稀疏矩陣的基本操作

2021-07-31 14:38:07 字數 1493 閱讀 7415

#include#include#include#includeusing namespace std;

template class sparsematrix

sparsematrix(int* arr,size_t row,size_t col,const t& invalid):_row(row),_col(col),_invalid(invalid)}}

}//訪問

//方法1:

/*t& access(size_t row,size_t col)

return _invalid;

}*///方法2:迭代器

t& access(size_t row,size_t col)

return _invalid;

} //輸出重定向。友元函式不是類成員函式,所以要寫模板引數列表

templatefriend ostream& operator<<(ostream& _cout,sparsematrixsm)

*/for(size_t i=0;i<_col;i++)//找原矩陣的每列的有效元素-》為新矩陣的每行的元素

}return sm;

} //快速逆置

sparsematrixfasttransport()

//原矩陣的每列(即轉置後的每行)在新矩陣的其實位置

int* paddr=new int[_col];

memset(paddr,0,_col*sizeof(paddr[0]));

for(size_t i=1;i<_sm.size();i++)

//放元素到新空間

for(size_t i=0;i<_sm.size();i++)

return sm;

} //矩陣加法

sparsematrixoperator+(const sparsematrix& sm)

else

}while(lidex <_sm.size())

while(ridex struct trituple

trituple()

{}size_t _row;

size_t _col;

t _data;

};private:

size_t _row;

size_t _col;

t _invalid;//無效值

vector> _sm;

};int main()

, ,,,

,,};

int arr1[6][5]=,,,

,,

,};sparsematrixsm((int*)arr,sizeof(arr)/sizeof(arr[0]),sizeof(arr[0])/sizeof(arr[0][0]),0);

sparsematrixsm1((int*)arr1,sizeof(arr1)/sizeof(arr1[0]),sizeof(arr1[0])/sizeof(arr1[0][0]),0);

//cout<

稀疏矩陣的乘法操作

此操作的演算法我就不多說了,裡面敘述得很清楚了。下面就是此程式 cpp view plain copy include include define null 0 define ok 1 define error 0 define maxsize 100 矩陣中非零元的最大值 define maxr...

十字鍊錶表示稀疏矩陣的基本操作

問題描述 兩個相同行數和列數的稀疏矩陣用十字鍊錶實現加法運算 資料描述 typedef struct ele elenode 演算法描述 1 若q j v j,則需要在c矩陣的鍊錶中插入乙個值為bij的結點,修改v v right。2 如q jj,則需要在c矩陣的鍊錶中插入乙個值為aij的結點,修改...

稀疏矩陣的壓縮矩陣

如果乙個矩陣中的大部分元素為零,稱為稀疏矩陣。對於稀疏矩陣而言,時間儲存的資料項很少,如果在程式中使用傳統的二維陣列方式來儲存,則十分浪費儲存空間,且矩陣越大,資源浪費越嚴重。為提記憶體空間利用率,可利用三項式 3 tuple 的資料結構,即把乙個非零項用 i,j,item value 來表示。其中...