c语言数据结构---十字链表

#include
#include
typedef struct node{//十字链表 输入三元组返回矩阵 
	int row,col,val;
	struct node *down,*right;
}JD,*J;
typedef struct {
	J *rhead,*chead;
	int mu,nu,tu;//行列非0元 
}CS;
CS creat(CS M){
	int m,n,t;;
	int k,j,e;
	JD *p,*q;
	printf("input row,col,非0个数:\n");
	scanf("%d %d %d",&m,&n,&t);
	M.mu=m;
	M.nu=n;
	M.tu=t;
	if(!(M.rhead=(J*)malloc((m+1)*sizeof(J)))||!(M.chead=(J*)malloc((n+1)*sizeof(J)))){
		printf("error init\n");
		exit(0); 
	}
	
	printf("success init!\n");
	for(k=1;k<=m;k++){
		M.rhead[k]=NULL;
	}
	for(j=1;j<=n;j++){
		M.chead[j]=NULL;
	}
	
	for(scanf("%d%d%d",&k,&j,&e);0!=k;scanf("%d%d%d",&k,&j,&e)){
		if(!(p=(J)malloc(sizeof(JD)))){
			printf("error int element\n");
			exit(0);
		}
		p->row=k;
		p->col=j;
		p->val=e;
	
		if(NULL==M.rhead[k]||M.rhead[k]->col>j){//链接行 
			p->right=M.rhead[k];
			M.rhead[k]=p;
		}else{
			for(q=M.rhead[k];(q->right)&&q->right->colright);
			p->right=q->right;
			q->right=p;
		}
		
		if(NULL==M.chead[j]||M.chead[j]->row>k){//链接列 
			p->down=M.chead[j];
			M.chead[j]=p;
		}else{
			for(q=M.chead[j];(q->down)&&q->down->rowdown);
			p->down=q->down;
			q->down=p;
		}
	}
	return M;
}
void print(CS M){
	for(int i=1;i<=M.nu;i++){
		if(NULL!=M.chead[i]){
			J p=M.chead[i];
			while(NULL!=p){
				printf("%d  %d  %d\n",p->row,p->col,p->val);
				p=p->down;
			}
		}
	}
}
int main(){
	CS M;
	M.chead=NULL;
	M.rhead=NULL;
	M=creat(M);
	printf("print \n");
	print(M);
}

你可能感兴趣的:(数据结构,c语言,链表)