稀疏矩阵的数据结构及相关算法
2015-12-06 21:54
369 查看
1三元组顺序表
数据结构:typedef struct{
int i,j; //非零元的行下标和列下标
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用
int mu,nu,tu; //矩阵的行数、列数和非零元个数
}TSMatrix;
矩阵的转置
(1)
Status TransposeSMatrix(TSMatrix M,TSMatrix &T){ T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu){ q=1; for(col=1;col<=M.nu;++col) for(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; }
(2)快速转置
附设两个向量num和cpot, num[col]表示矩阵M中第col列中非零元的个数,cpot[col]指示M中第col列的第一个非零元在转置后的三元顺序组中的位置。有 cpot[1]=1;
cpot[col]=cpot[col-1]+num[col-1];
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T){ T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if(T.tu){ for(col=1;col<=M.nu;++col) num[col]=0; for(t=1;t<=M.tu;++t) ++num[M.data[t].j]; cpot[1]=1; for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(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; }
相关文章推荐
- 【算法设计与数据结构】URAL 1152.False Mirrors(状态压缩dp+dfs)
- 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
- 学习数据结构有用吗?
- 鸟瞰数据结构
- 数据结构上机实验-二叉排序树的创建
- 如何进行程序设计?
- 第十二周--数据结构-图的遍历之广度优先遍历求解问题
- BestCoder Round #65 HDU 5592 ZYB's Premutation (数据结构查询第K大)
- splay区间翻转及删除区间,平移区间
- Java数据结构
- 数据结构实验之查找七:线性之哈希表
- 数据结构C++实现——二叉树
- 数据结构实验之查找五:平方之哈希表
- 《奥赛经典——数据结构篇》 3.4队列习题
- 【ShancoLove】带你看数据结构——第十三课:学生成绩管理系统
- 数据结构——线性表
- 2015年大二上-数据结构-串(4)- 字符串加密
- 2015年大二上-数据结构-串(3)- 顺序串算法
- 数据结构绪论
- 链表反转