C语言:十字链表的相加相减

#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct node
{
	int row, col;
	int v;
	struct node *r, *d;
}*link;

typedef struct crosslist
{
	link rowhead[N], colhead[N];
	int rows, cols, nums;
}*list;

int i, j;


list init(list cl);
list copy(list s1);
list add(list a, list b);
list sub(list s1, list s2);
void output(list cl);


list init(list cl)
{
	link p, q, s;
	int n, m, data;
	cl=(list)malloc( sizeof(struct crosslist) );
	if( !cl )
	{
		printf("\n无法生成十字链表\n");
		return 0;
	}
	
	printf("\n矩阵总行数: ");
	scanf("%d", &n);
	printf("\n矩阵总列数: ");
	scanf("%d", &m);
	cl->rows=n;
	cl->cols=m;
	cl->nums=0;

	for(i=0; i<n; i++)
	{
		cl->rowhead[i]=(link )malloc( sizeof(struct node) );
		cl->rowhead[i]->r=NULL; 
	}


	for(j=0; j<m; j++)
	{
		cl->colhead[j]=(link )malloc( sizeof(struct node) );
		cl->colhead[j]->d=NULL;
	}

	for(i=0; i<n; i++)
	{
		printf("\n第%d行:", i+1);
		q=cl->rowhead[i];

		for(j=0; j<m; j++)
		{
			scanf("%d", &data);
			if(data != 0)
			{
				p=(link)malloc( sizeof(struct node) );

				p->v=data;
				p->row=i+1;
				p->col=j+1;
				cl->nums++;

				p->r=q->r;
				q->r=p;
				q=p;
				
				s=cl->colhead[j];
				while( s->d )
					s=s->d;
				p->d=s->d;
				s->d&#
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值