用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

十字链表表示的稀疏矩阵相加

2012-10-10 作者: 神马举报

[c]代码库

typedef struct node
{
	int row, col;
	struct node *down , *right;
	union v_next
	{
		datatype v;
		struct node *next;
	}
} MNode,*MLink;


MLink AddMat ( Ha,Hb )
MLink Ha,Hb;
{
	Mnode *p,*q,*pa,*pb,*ca,*cb,*qa;
	if ( Ha->row!=Hb->row || Ha->col!=Hb->col ) return NULL;
	ca=Ha->v_next.next; /*ca 初始指向A 矩阵中第一行表头结点*/
	cb=Hb->v_next.next; /*cb 初始指向B 矩阵中第一行表头结点*/
	do
	{
		pa=ca->right; /*pa 指向A 矩阵当前行中第一个结点*/
		qa=ca; /*qa 是pa 的前驱*/
		pb=cb->right; /*pb 指向B 矩阵当前行中第一个结点*/
		while ( pb->col!=0 ) /*当前行没有处理完*/
		{
			if ( pa->col < pb->col && pa->col !=0 ) /*第三种情况*/
			{
				qa=pa;
				pa=pa->right;
			}
			else if ( pa->col > pb->col || pa->col ==0 ) /*第四种情况*/
			{
				p=malloc ( sizeof ( MNode ) );
				p->row=pb->row;
				p->col=pb->col;
				p->v=pb->v;
				p->right=pa;
				qa->right=p; /* 新结点插入*pa 的前面*/
				pa=p;
				/*新结点还要插到列链表的合适位置,先找位置,再插入*/
				q=Find_JH ( Ha,p->col ); /*从列链表的头结点找起*/
				while ( q->down->row!=0 && q->down->row<p->row )
					q=q->down;
				p->down=q->down; /*插在*q 的后面*/
				q->down=p;
				pb=pb->right;
			} /* if */
			else /*第一、二种情况*/
			{
				x= pa->v_next.v+ pb->v_next.v;
				if ( x==0 ) /*第二种情况*/
				{
					qa->right=pa->right;
					./*从行链中删除*/
					/*还要从列链中删除,找*pa 的列前驱结点*/
					q= Find_JH ( Ha,pa->col ); /*从列链表的头结点找起*/
					while ( q->down->row < pa->row )
						q=q->down;
					q->down=pa->down;
					free ( pa );
					pa=qa;
				} /*if (x==0)*/
				else /*第一种情况*/
				{
					pa->v_next.v=x;
					qa=pa;
				}
				pa=pa->right;
				pb=pb->right;
			}
		} /*while*/
		ca=ca->v_next.next; /*ca 指向A 中下一行的表头结点*/
		cb=cb->v_next.next; /*cb 指向B 中下一行的表头结点*/
	}
	while ( ca->row==0 ) /*当还有未处理完的行则继续*/
		return Ha;
}

<br />本文来自【C语言中文网】:<a href="http://see.xidian.edu.cn/cpp/html/970.html" target="_blank">http://see.xidian.edu.cn/cpp/html/970.html</a>


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...