你的代码有问题,这段代码
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值也会有类似情况。
十字链表不知是什么,下面是快速转置算法: template