#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
/*定义结点结构体类型*/
typedef struct node
{
int i,j,val;
struct node *row,*col;
}Node;
/*定义十字链表结构体类型*/
typedef struct matrix
{
int m,n;
Node *rhead[10],*chead[10];
}Matrix;
/*分别在十字链表的行列中查找新元素插入位置*/
Matrix* insert_matrix(Matrix* M,Node* N)
{
Node *p,*q;
/*查找行的插入位置*/
bool done;
done=(M->rhead[N->i]==NULL || N->j<M->rhead[N->i]->j);
if(done)
{
N->row=M->rhead[N->i];
M->rhead[N->i]=N;
}
else
{
p=M->rhead[N->i];
q=p->row;
while(q!=NULL)
{
if(N->j<q->j)
break;
p=q;
q=p->row;
}
p->row=N;
N->row=q;
}
/*查找行的插入位置*/
done=(M->chead[N->j]==NULL && N->i<M->chead[N->j]->i);
if(done)
{
N->col=M->chead[N->j];
M->chead[N->j]=N;
}
else
{
p=M->chead[N->j];
q=p->col;
while(q!=NULL)
{
if(N->i<q->i)
break;
p=q;
q=p->col;
}
p->col=N;
N->col=q;
}
return M;
}
Matrix* creat_matrix()
{
Matrix *M;
Node *N;
int k,v,r,c;
M=(Matrix*)malloc(sizeof(Matrix));
for(k=0;k<10;k++)
M->rhead[10]=NULL;
for(k=0;k<10;k++)
M->chead[10]=NULL;
printf("请输入矩阵的行,列数:");
scanf("%d%d",&M->m,&M->n);
printf("请输入矩阵元素:");
for(k=0;k<M->m*M->n;k++)
{
scanf("%d",&v);
r=k/M->m;
c=k%M->m;
if(v!=0)
{
N=(Node*)malloc(sizeof(Node));
N->i=r;N->j=c;
N->val=v;
N->row=N->col=NULL;
M=insert_matrix(M,N);
}
}
return M;
}
void printf_matrix(Matrix *M)
{
Node *p;
int a,b;
for(a=0;a<M->m;a++)
{
p=M->rhead[a];
for(b=0;b<M->n;b++)
{
if(p!=NULL && p->j==b)
{
printf("%d ",p->val);
p=p->row;
}
else
printf("0 ");
}
printf("\n");
}
}
main ( )
{
Matrix *M;
M=creat_matrix();
printf_matrix(M);
return 0;
}
为什么运行时出现错误呢?