顺序存储的稀疏矩阵(三元组)的转置

来源:互联网 发布:知道mac地址怎么查ip 编辑:程序博客网 时间:2024/06/18 13:08
#define MAXSIZE 12500typedef struct {    int i, j;        //行i,列j    ElemType e;}Triple;typedef struct {    Tripe  data[MAXSIZE + 1];    int rowNum, colNum, nozeroNum;   /* mu 为行数 nu 为列数 tu 为非零元个数*/}TSMatrix;

转置1

1、矩阵的行列的值互换,也就是i、j互换。
2、对三元组的次序进行重新排序。

这里写图片描述

TSMatrix transpose(TSMatrix a){/*稀疏矩阵(三元组存储结构)转置算法*/    int p, q, col;    TSMatrix a;    b.rowNum = a.colNum;  b.colNum = a.rowNum;   b.tu = a.nozeroNum;    if (a.nozeroNum != 0)    {        q = 1;        for (col = 1; col <= a.colNum; col++)            for (p = 1; p <= a.nozeroNum; p++)                if (a.data[p].j == col)                {                    b.data[q].j = a.data[p].i;                    b.data[q].i = a.data[p].j;                    b.data[q].e = a.data[p].e;                    q++;                }    }    return b;}

转置2

1、矩阵的行列的值互换,也就是i、j互换。
2、直接将转置后的三元组放置在b中恰当的位置 。
/* cpot 是对应行的第一个位置,所以第一列的第一个位置为1,其他行的位置为前面所有行所对应的非零个数的和+1*/
这里写图片描述

TSMatrix transpose(TSMatrix a){/*稀疏矩阵(三元组存储结构)转置算法*/    int p, q, col;    int num[a.colNum + 1];    int cpot[a.colNum + 1];    TSMatrix b;    b.rowNum = a.colNum;  b.colNum = a.rowNum;   b.tu = a.nozeroNum;    if (a.nozeroNum != 0)    {        for (col = 1; col <= a.colNum; col++) num[col] = 0;        for (int t = 1; t <= a.nozeroNum; t++) ++num[a.data[t].j];        cpot[1] = 1;        for (col = 2; col <= a.colNum; col++) cpot[col] = cpot[col - 1] + num[col - 1];        for (p = 1; p <= a.nozeroNum; p++) {            col = a.data[p].j;            q = cpot[col];      //p 代表 矩阵a的位置,q代表在b中要插入的位置。            b.data[q].j = a.data[p].i;            b.data[q].i = a.data[p].j;            b.data[q].e = a.data[p].e;            ++cpot[col];      //位置发生变化 自动加一        }    }    return b;}

这里写图片描述

阅读全文
0 0
原创粉丝点击