void zhuanzhi(TSMatrix *k,TSMatrix *q)
{
q->m=k->n;
q->n=k->m;
q->len=k->len;//非零元素个数
int n=0;
int i,j;
for(i=0;i n;i++)
for(j=0;j len;k++)
if(k->data[j].col==i)
{q->data[n].col=k->data[j].row;
q->data[n].row=k->data[j].col;
q->data[n].v=k->data[j].v;
n++;
}
}
三元组只有第一个正确 后面都是随机数
望采纳!!点击该回答右侧的“采纳”按钮即可采纳!
我看出来几个问题:
首先,在枚举非零元素时,应该使用 j 而不是 k 作为循环变量。
其次,在给转置矩阵的非零元素赋值时,应该使用 n 作为数组下标,而不是直接将其添加到数组的末尾。
代码应该是这样的
void zhuanzhi(TSMatrix *k, TSMatrix *q)
{
q->m = k->n;
q->n = k->m;
q->len = k->len; // 非零元素个数
int n = 0;
int i, j;
for (i = 0; i < k->n; i++) {
for (j = 0; j < k->len; j++) {
if (k->data[j].col == i) {
q->data[n].col = k->data[j].row;
q->data[n].row = k->data[j].col;
q->data[n].v = k->data[j].v;
n++;
}
}
}
}