参考代码:


#include<stdio.h>
#include<malloc.h>

typedef struct node {
	int i, j;
	int data;
	struct node *right, *down;
} node;

typedef struct CrossList {
	node **rhead, **chead;
	int mu, nu, tu;
} CrossList;

void CreateCrossList(CrossList *M);
void DisplayCrossList(CrossList *M);

int main()
{
	CrossList M;
	CreateCrossList(&M);
	DisplayCrossList(&M);
	return 0;
}

void CreateCrossList(CrossList *M) {
	int i, j, data;
	node *p, *q;
	scanf("%d%d", &M->mu, &M->nu);
	M->tu = 0;
	M->rhead = (node **)malloc(sizeof(node *) * (M->mu + 1));
	M->chead = (node **)malloc(sizeof(node *) * (M->nu + 1));
	for (i = 1; i <= M->mu; i++) {
		p = (node *)malloc(sizeof(node));
		M->rhead[i] = p;
		p->right = NULL;
	}
	for (j = 1; j <= M->nu; j++) {
		q = (node *)malloc(sizeof(node));
		M->chead[j] = q;
		q->down = NULL;
	}
	for (i = 1; i <= M->mu; i++) {
		for (j = 1; j <= M->nu; j++) {
			scanf("%d", &data);
			if (data) {
				p = (node *)malloc(sizeof(node));
				p->i = i;
				p->j = j;
				p->data = data;
				p->right = NULL;
				p->down = NULL;
				// 找到插入位置上一个结点
				for (q = M->rhead[i]; q->right && j > q->right->j; q = q->right);
				p->right = q->right;
				q->right = p;
				for (q = M->chead[j]; q->down && i > q->down->i; q = q->down);
				p->down = q->down;
				q->down = p;
				M->tu++;
			}
		}
	}
}

void DisplayCrossList(CrossList *M) {
	int i, j;
	node *p;
	for (i = 1; i <= M->mu; i++) {
		for (j = 1, p = M->rhead[i]->right; j <= M->nu; j++) {
			if (p && j == p->j) {
				printf("%d ", p->data);
				p = p->right;
			}
			else {
				printf("0 ");
			}
		}
		printf("\n");
	}
}


点赞(3)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论