请教各位《数据结构》数组和广义表这部分内容中,建立稀疏矩阵的十字链表算法。程序运行时有错误,求解惑!

2024-11-06 21:40:29
推荐回答(2个)
回答1:

你的代码有问题,这段代码
if(M->row_head[i]==NULL) /*生成结点*/
M->row_head[i]=p;
要修改成如下:
if(M->row_head[i]==NULL||M->row_head[i]->j>j) {
p->right=M->row_head[i];
M->row_head[i]=p;
}

同样
后面的代码
if(M->col_head[j]==NULL)
M->col_head[j]=p;
也要修改成如下:
if(M->col_head[j]==NULL || M->col_head[j]->i>i) {
p->down=M->col_head[j];
M->col_head[j]=p;
}

修改的原因如下:首先,你的代码里面节点的输入是任意的,存在这种情况,后面输入的节点p的j值可能比当前行的的第一个非零节点的j值小,对应代码里面就是M->row_head[i]->j>j 这种情况也需要插入!然后,插入之后你要把把链连起来,对应的代码就是 p->right=M->row_head[i];
同样的道理,i值也会有类似情况。

回答2:

十字链表不知是什么,下面是快速转置算法: template Sparse...TSMatrix &t,ElemType A[M][N]) { int i,j; t.rows=m;t.cols=n;...