数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
2014-07-30 16:19
549 查看
稀疏矩阵有三种表示方式:1,三元组顺序表 2,行逻辑连接的顺序表 3,十字链表。
矩阵的一个非零元可以由一个三元组(i,j,e)唯一确定,由此稀疏矩阵可以由表示非零元的三元组及其行列数唯一确定。下面代码为以三元组顺序表为存储结构的基本操作,其中快速转置的思想是预先确定原矩阵的每一列的非零元个数,在执行转置时候可以随即插入。
矩阵的一个非零元可以由一个三元组(i,j,e)唯一确定,由此稀疏矩阵可以由表示非零元的三元组及其行列数唯一确定。下面代码为以三元组顺序表为存储结构的基本操作,其中快速转置的思想是预先确定原矩阵的每一列的非零元个数,在执行转置时候可以随即插入。
//三元组顺序表来存储矩阵并进行矩阵的转置 typedef int Elemtype ; const int MAXSIZE=12500; const int MAXNUM=20; typedef struct{ int i,j; //该非零元的行下标和列下标 Elemtype e; //非零的值 } Triple; typedef struct{ Triple data[MAXSIZE+1]; //非零元的三元组表,data【0】未使用 int mu,nu,tu; //分别表示矩阵行数,列数,非零元的个数 }TSMatrix; //初始化三元组顺序表并输入行数和列数和非零元的个数 Status InitTSMatrix(TSMatrix & M,int mu,int nu,int tu){ if(tu>(mu*nu)) return ERROR; M.mu=mu; M.nu=nu; M.tu=tu; int i,j,e; for(int k=1;k<=M.tu;++k){ cout<<"Please input the 'rownumber' 'colnumber' and 'the value' of number "<<k<<":"; cin>>i>>j>>e; if(i>0&&i<=mu&&j>0&&j<=nu){ M.data[k].i=i; M.data[k].j=j; M.data[k].e=e; }else return ERROR; } return OK; } Status TransposeSTMatrix(TSMatrix M,TSMatrix &T){ T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(!T.tu) return ERROR; int q=1; for(int col=1;col<=M.nu;++col){ for(int p=1;p<=M.tu;++p){ if(M.data[p].j==col){ T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } } } return OK; } //快速转置矩阵方法 Status FastTransposeSMatrix(TSMatrix M,TSMatrix & T){ //采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(!T.tu) return ERROR; int num[MAXNUM];//????? for(int col=1;col<=M.nu;++col) num[col]=0; for(int t=1;t<=M.tu;++t) ++num[M.data[t].j]; int cpot[MAXNUM]; cpot[1]=1; //求第col列中第一个非零元在T.data中的序号 for(int col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; int q,col; for(int p=1;p<=M.tu;++p){ col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++cpot[col]; } return OK; } void DisTRSMatrix(TSMatrix m){ cout<<"The TSMatrix is:"<<endl; for(int k=1;k<=m.tu;++k){ cout<<m.data[k].i<<" "<<m.data[k].j<<" "<<m.data[k].e<<endl; } } int main() { TSMatrix m,t; InitTSMatrix(m,6,7,8); //TransposeSTMatrix(m,t); FastTransposeSMatrix(m,t); DisTRSMatrix(t); return 0; }
相关文章推荐
- 数据结构--数组和广义表--以行逻辑链接的顺序表为存储结构的矩阵的基本运算(求矩阵乘积)
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置
- 5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- 2015年大二上-数据结构-数组与广义表(3)-2.稀疏矩阵的三元组表示
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 顺序存储的稀疏矩阵(三元组)的转置
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 第九周 数据结构实现项目--数组和广义表【项目2 - 对称矩阵压缩存储的实现与应用】
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵相乘
- 第九周 数据结构实践项目——数组和广义表【项目3.1-稀疏矩阵的三元组表示的实现及应用】
- 数据结构--数组和广义表--创建以十字链表为存储结构的矩阵
- 稀疏矩阵的存储方式及其快速转置的实现
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 数据结构_数组与广义表_矩阵的十字链表存储稀疏矩阵相加
- 通过三元组用顺序存储方式封装稀疏矩阵