#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 來表示。其中...