首页 > 编程知识 正文

稀疏矩阵如何转换成三元组表,三元组还原矩阵

时间:2023-05-04 17:53:21 阅读:149354 作者:2217

# include stdio.h # include stdlib.h # defineo k1 # define error0# define maxsize 256 typedefintelemtype; typedef int Status; typedef struct{int i,j; //矩阵中元素的行号、列号ElemType v; //元素值}三重; typedef struct { triple arr [ maxsize ]; //非零元素三元组int Rows,Cols,Nums; //矩阵的行数、列数、非零的原始个数}SqSMatrix; //稀疏矩阵三元组顺序表示//三元组稀疏矩阵的转置方法——1 .简单方法:2.列顺序扫描法,3 .快速转置法/*1.简单方法:将三元组表中行与列的内容进行互换,按行号从小到大排序新三元组表中的各三元组排序算法是采用经典排序算法的时序扫描转置算法statustransposesmatrix (sqsmatrixa,SqSMatrix B )//将稀疏矩阵a转置为稀疏矩阵b.Rows=a //B的列数为a的行数B.Nums=A.Nums; //B的非零元个数为a的非零元个数if(a.nums0) {int q=0; int p=0; for(intk=0; k A.Cols; k ) for(p=0; p A.Nums; p () if ) a.arr[p].j==k ) /第p个三元组的元素的列号为kB.arr[q].i=A.arr[p].j; //新三元组的行号B.arr[q].j=A.arr[p].i; //新三元组的列号B.arr[q].v=A.arr[p].v; //新三元组值q; //B.arr的当前位置1 } } }返回确定; //3 .稀疏矩阵快速转置算法statusfasttransposesmatrix (sqsmatrixa,SqSMatrix B ) {B.Rows=A.Cols; B.Cols=A.Rows; B.Nums=A.Nums; int rowStart[MAXSIZE]; int rowNum[MAXSIZE]; int k=0; int p=0; if(a.nums0) (/第一步骤:每a列非零元素的个数for ) k=0; k A.Cols; k ) rowNum[k]=0; //rowNums数组初始化for(p=0; p A.Nums; p ) rowNum[A.arr[p].j]; //A的每一列,即b的每行计数非零元素的个数//第二步骤:计算b的每行的空间坐标轴的开始位置rowStart[0]=0; for(k=1; k A.Cols; k ) row start [ k ]=row start [ k-1 ] row num [ k-1 ]; for(p=0; p A.Nums; p () {int q=rowStart[A.arr[p].j]; B.arr[q].i=A.arr[p].j; B.arr[q].j=A.arr[p].i; B.arr[q].v=A.arr[p].v; rowStart[A.arr[p].j]; } }返回确定; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。