7-2 三元组顺序表表示的稀疏矩阵转置运算Ⅰ(PTA - 数据结构)

三元组顺序表表示的稀疏矩阵转置。

输入格式:

输入第1行为矩阵行数m、列数n及非零元素个数t。
按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。

输出格式:

输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。

输入样例1:

3 4 3
0 1 -5
1 0 1
2 2 2

输出样例1:

0 1 1
1 0 -5
2 2 2

        这道题算是对于数据结构 三元组、矩阵、广义表 学习心得代码,这篇博文中“快速转置算法”的拓展,更深入的了解了,更正确的实践了此算法中具体的内容。

        由于题目给出的有一些内容和书本上的有些出入(例如算法中的num数组和cpot数组的行列数要从0开始算起),因此经过了一些Debug,成功改出。


代码展示:

//
// Created by DDD on 2023/11/6.
//
#include 


typedef struct {
    int i,j;
    int e;
}Tuple;

typedef struct {
    Tuple data[10000];
    int rows,cols,tu;
}TSMatrix;

void CreateTS(TSMatrix *TS, int row, int col, int t){    //创建三元组
    TS->rows = row;
    TS->cols = col;
    TS->tu = t;
}

void FastTranSMatrix(TSMatrix *M,TSMatrix *T,int column){  //快速转置,M is origin
    int num[column+1];
    int cpot[column+1];
    int col;
    int q;
    if(T->tu){
        for (col = 1;col<=M->cols;col++)
            num[col] = 0;
        for (int i = 1;i<=M->tu;i++)
            num[M->data[i].j]++;
        cpot[1] = 1;
        for(col = 1;col<=M->cols;col++)
            cpot[col] = cpot[col - 1] + num[col - 1];
        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]++;
        }
    }
}


int main(){
    TSMatrix ts,ns;
    int row,col,t;
    scanf("%d %d %d",&row,&col,&t);
    CreateTS(&ts, row, col, t);
    CreateTS(&ns, row, col, t);
    for (int i = 0;i

你可能感兴趣的:(数据结构,数据结构,矩阵,算法,c语言)