西工大数据结构实验2.1稀疏矩阵转置

 这是我的第一篇博文,本来我并没有写博文的打算,但是做这道实验的时候把我气到了。先说一个最重要的坑,实验中的矩阵它的行列是从零开始的,一个矩阵的行和列竟然从零开始计算,估计只有你校的样例才会如此逆天,所以,这也就意味这测试样例中会出现零行,零列的情况。还有的就是一些输入方面的坑,可以选择输入一个然后用getchar吃一个的方式。

排序过程我放在PrintMatrix函数中,这个比较简单,也有很多方式可以使用,不再赘述,有需要可以参考我的代码。

最后祝诸君学业有成,希望各位可以点赞支持。

参考博文,(40条消息) 西工大NOJ数据结构实验——2.1稀疏矩阵转置_没耳朵的Rabbit的博客-CSDN博客

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct {
    int row;
    int col;
    ElementType value;
} Triple, *PTriple;
typedef struct {
    PTriple tri;
    int row_len;
    int col_len;
    int num;
} Matrix, *PMatrix;

void InitMatrix(PMatrix, int, int);
void CreateMatrix(PMatrix);
void RankTranspose(PMatrix);
void PrintMatrix(PMatrix);

int main() {
    int row, col;
    scanf("%d %d", &row, &col);
    getchar();
    PMatrix matrix = (PMatrix) malloc(sizeof(Matrix));
    InitMatrix(matrix, row, col);
    CreateMatrix(matrix);
    RankTranspose(matrix);
    PrintMatrix(matrix);
    free(matrix->tri);
    free(matrix);
    return 0;
}

void InitMatrix(PMatrix matrix, int row, int col) {
    matrix->col_len = col;
    matrix->row_len = row;
    matrix->num = 0;
    matrix->tri = (PTriple) malloc(sizeof(Triple) * (row * col + 1));
}

void CreateMatrix(PMatrix matrix) {
    int m, n, value;
    while (1) {
        scanf("%d",&m);
        getchar();
        scanf("%d",&n);
        getchar();
        scanf("%d",&value);
        getchar();
        if (m == 0&&n==0&&value==0)
            break;
        matrix->tri[matrix->num].row = m;
        matrix->tri[matrix->num].col = n;
        matrix->tri[matrix->num].value = value;
        matrix->num++;
    }
}

void RankTranspose(PMatrix matrix) {
    int t = matrix->col_len;
    matrix->col_len = matrix->row_len;
    matrix->row_len = t;
    for (int i = 0; i < matrix->num; i++) {
        int temp = matrix->tri[i].row;
        matrix->tri[i].row = matrix->tri[i].col;
        matrix->tri[i].col = temp; // 转置
    }

    
}

void PrintMatrix(PMatrix matrix) {
    for (int i = 0; i < matrix->row_len; i++) {
        for (int j = 0; j < matrix->num; j++) {
            if (matrix->tri[j].row == i) {
                printf("%d %d %d\n", matrix->tri[j].row, matrix->tri[j].col, matrix->tri[j].value);
            }
        }
    }
}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值