typedef struct node |
{ |
int row, col; |
struct node *down , *right; |
union v_next |
{ |
datatype v; |
struct node *next; |
} |
} MNode,*MLink; |
MLink CreatMLink( ) /* 返回十字链表的头指针*/ |
{ |
MLink H; |
Mnode *p,*q,*hd[s+1]; |
int i,j,m,n,t; |
datatype v; |
scanf ( “%d,%,%d”,&m,&n,&t ); |
H= malloc ( sizeof ( MNode ) ); /*申请总头结点*/ |
H->row=m; |
H->col=n; |
hd[0]=H; |
for ( i=1; i<S; i++ ) |
{ |
p= malloc ( sizeof ( MNode ) ); /*申请第i 个头结点*/ |
p->row=0; |
p->col=0; |
p->right=p; |
p->down=p; |
hd[i]=p; |
hd[i-1]->v_next.next=p; |
} |
hd[S]->v_next.next=H; /*将头结点们形成循环链表*/ |
for ( k=1; k<=t; k++ ) |
{ |
scanf ( “%d,%d,%d”,&i,&j,&v ); /*输入一个三元组,设值为int*/ |
p= malloc ( sizeof ( MNode ) ); |
p->row=i ; |
p->col=j; |
p->v_next.v=v |
/*以下是将*p 插入到第i 行链表中去,且按列号有序*/ |
q=hd[i]; |
while ( q->right!=hd[i] && ( q->right->col ) <j ) /*按列号找位置*/ |
q=q->right; |
p->right=q->right; /*插入*/ |
q->right=p; |
/*以下是将*p 插入到第j 行链表中去,且按行号有序*/ |
q=hd[i]; |
while ( q->down!=hd[j] && ( q->down->row ) <i ) /*按行号找位置*/ |
q=q->down; |
p-> down =q-> down; /*插入*/ |
q-> down =p; |
} /*for k*/ |
return H; |
} /* CreatMLink */ |