首页 新闻 会员 周边

关于数据结构中一次定位快速转置的一些问题

0
悬赏园豆:20 [待解决问题]
#include<stdio.h>
#define M 100
typedef struct {
    int row;
    int col;
    int e;
}Triple;
typedef struct {
    Triple data[M + 1];
    int m, n, len;
}TSMatrix;
void InPut(TSMatrix* t);
void OutPut(TSMatrix* t);
void FastTransposeTSMatrix(TSMatrix A, TSMatrix* B);
int main(void) {
    TSMatrix A;
    TSMatrix B;
    InPut(&A);
    FastTransposeTSMatrix(A, &B);
    OutPut(&B);
    return 0;
}
//读入元素
void InPut(TSMatrix* t) {
    int i =1;
    int j = 1;
    int flag = 1;
    int row, col, e;
    printf("请输入所需存取的元素及其位置:\n");
    while (flag) {
        scanf("%d %d %d", &row, &col, &e);
        if (row != -1) {
            t->data[i].row = row;
            t->data[i].col = col;
            t->data[i].e = e;
            i++;
            j++;
        }
        else {
            flag = 0;
            t->len = j;
            t->m = 7;
            t->n = 6;
        }
    }
}
//输出元素
void OutPut(TSMatrix* t) {
    for (int i = 1; i <= t->len; i++) {
        printf("%d %d %d\t\n", t->data[i].row, t->data[i].col, t->data[i].e);
    }
}
//一次定位快速逆置
void FastTransposeTSMatrix(TSMatrix A, TSMatrix* B) {
    int col, p, q, t;
    int num[M];
    int position[M];
    B->len = A.len, B->n = A.m, B->m = A.n;
    if (B->len) {
        //初始化该数组所有元素为0
        for (col = 1; col <=A.n; col++) {
            num[col] = 0;
        }
        //计算每一列中非0元素的个数
        for (t = 1; t <= A.len; t++) {
            num[A.data[t].col]++;
        }
        position[1] = 1;
        for (col = 2; col <= A.n; col++) {
            position[col] = position[col - 1] + num[col - 1];
        }
        for (p = 1; p <= A.len; p++) {
            col = A.data[p].col;
            q = position[col];
            B->data[q].row = A.data[p].col;
            B->data[q].col = A.data[p].row;
            B->data[q].e = A.data[p].e;
            position[col]++;
        }
    }
}

新手小白。的主页 新手小白。 | 初学一级 | 园豆:75
提问于:2021-10-22 18:06
< >
分享
所有回答(1)
0

这个有可能是数组越界了。
给 num 数组设置更大一些试试有没有错误。比如 int num[M*2]

wang_yb | 园豆:4891 (老鸟四级) | 2021-10-22 20:11

还是不可以

支持(0) 反对(0) 新手小白。 | 园豆:75 (初学一级) | 2021-10-28 20:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册