赞
踩
一般都是采用顺序存储的方式来表示数组。
两种顺序储存方式
无论是行优先还是列优先
多维数组时
行优先:从右到左
列优先:从左到右
为多个相同的非零元素只分配一个存储空间,对零元素不分配空间。
template <class T> struct Triple { int i; //该非零元的行下标 int j; //该非零元的列下标 T e; //该非零元的值 };//三元组类型 template <class T> class TSMatrix { public: Triple<T> data[MAXSIZE+1]; int rows; //行数值 int cols; //列数值 int nums; //该非零元素的个数 public: TSMatrix(); ~TSMatrix(); Status InitMatrix(T *A, int rows, int cols); Status TransMatrix(TSMatrix &M); Status FastTransMatrix(TSMatrix &M); Status DispMatrix(char name); };
//矩阵转置算法实现 template <class T> Status TSMatrix<T>::TransMatrix(TSMatrix &M) { //采用三元组表方式存储,实现矩阵的转置 rows = M.cols; cols = M.rows; nums = M.nums; if(nums != 0) { int q = 0; //新三元组表T中的元素下标 //按M的列序号由小到大转化 for(int col=0; col<M.cols; col++) { for(int p=0; p<M.nums; ++p) { //在三元组顺序表M中查找列下标等于col者 if(M.data[p].j == col) { data[q].i = M.data[p].j; data[q].j = M.data[p].i; data[q].e = M.data[p].e; q++; } } } } return OK; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。