初学者想问一下数据结构与算法稀疏矩阵数据输入没有运行结果,如何解决?(语言-c++)


#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100

typedef struct Triple
{
    int row, col, val;
}Triple;

typedef struct TriMatrix
{
    Triple data[MAXSIZE];
    int mu, nu, ru;
}TriMatrix;

void InitTriMatrix(TriMatrix*& A)
{
    A = (TriMatrix*)malloc(sizeof(TriMatrix));
    if (A == NULL) {
        printf("Out of space!\n");
    }
    else {
        A->mu = 0;
        A->nu = 0;
        A->ru = 0;
        return ;
    }
}

void Insert(TriMatrix* A, int i, int j, int x, int k) {
    A->data[k].row = i;
    A->data[k].col = j;
    A->data[k].val = x;
    A->ru = A->ru + 1;
}

void Build(TriMatrix* A) 
{
    int k = 0;
    while (1) 
    {
        int i, j, x;
        scanf_s("%d", &i);
        scanf_s("%d", &j);
        scanf_s("%d", &x);
        if (0 == i && 0 == j && 0 == x) break;
        else {
            Insert(A, i, j, x, k);
            k++;
        }
    }
}

void Output(TriMatrix* A) 
{
    for (int k = 0; k < A->ru; k++) 
    {
        printf("%d %d %d \n",A->data[k].row,A->data[k].col,A->data[k].val);
    }
}

void Transform(TriMatrix *A, TriMatrix *&B)
{
    int num[MAXSIZE] = { 0 }, pos[MAXSIZE] = { 0,1 }, i, m;
    B->mu = A->nu;
    B->nu = A->mu;
    B->ru = A->ru;
    for (i = 1; i <= A->nu; i++)
        num[A->data[i].col]++;
    for (i = 2; i <= A->nu; i++)
        pos[i] = pos[i - 1] + num[i - 1];
    for (i = 1; i <= A->ru; i++)
    {
        m = A->data[i].col;
        B->data[pos[m]].row = A->data[i].col;
        B->data[pos[m]].col = A->data[i].row;
        B->data[pos[m]].val = A->data[i].val;
        pos[m]++;
        printf("%d %d %d\n", &B->data[pos[m]].row, &B->data[pos[m]].col, &B->data[pos[m]].val);
    }
}

int main() 
{
    TriMatrix* A;
    TriMatrix* B;
    InitTriMatrix(A);
    InitTriMatrix(B);
    int r, c;
    printf("请输入矩阵A的行;/n");
    printf("请输入矩阵A的列;/n");
    scanf_s("%d%d", &r, &c);
    B->nu = A->mu = r;
    B->mu = A->nu = c;

    Build(A);
    Transform(A, B);
    Output(B);
    return 0;
}

参考一下

void Transform(TriMatrix *A, TriMatrix *&B)
{
    int num[MAXSIZE] = { 0 }, pos[MAXSIZE] = { 0,1 }, i, m;
    B->mu = A->nu;
    B->nu = A->mu;
    B->ru = A->ru;
    for (i = 1; i <= A->nu; i++)
        num[A->data[i].col]++;
    for (i = 2; i <= A->nu; i++)
        pos[i] = pos[i - 1] + num[i - 1];
    for (i = 1; i <= A->ru; i++)
    {
        m = A->data[i].col;
        B->data[pos[m]].row = A->data[i].col;
        B->data[pos[m]].col = A->data[i].row;
        B->data[pos[m]].val = A->data[i].val;
        pos[m]++;
    }
    Output(B);
}
 
int main() 
{
    TriMatrix* A;
    TriMatrix* B;
    InitTriMatrix(A);
    InitTriMatrix(B);
    int r, c;
    printf("请输入矩阵A的行;\n");
    printf("请输入矩阵A的列;\n");
    scanf_s("%d%d", &r, &c);
    B->nu = A->mu = r;
    B->mu = A->nu = c;
 
    Build(A);
    Transform(A, B);
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^