单向链表 练习3.7 多项式相乘

3.7  编写一个函数将两个多项式相乘,用一个链表实现。你必须保证输出的多项式按幂次排列并且最多有一项为任意幂。

/* 多项式相乘 */
Position Multiply2Pol ( Position h1, Position h2 )
{
	Position h;
	Position p1, p2;
	int size = 0;
	h = ( Position )malloc(sizeof(struct Node));
	h->next = NULL;
	for ( p1 = h1->next; p1 != NULL; p1 = p1->next )
	{
		for ( p2 = h2->next; p2 != NULL; p2 = p2->next )
		{
			InsertPolynomial( h, p1->coefficient * p2->coefficient, p1->exponent + p2->exponent );
			size++;
		} 
	}
	//排序合并
	MPSort( h, size ); 
	return h;
}

/* 冒泡排序多项式,按照项的次数从小到大排序 */
void MPSort( Position h , int size )
{
	Position p;
	for( int i = 0; i < size-1; i++ )
	{
		p = h->next;
		while( p != NULL && p->next != NULL )
		{
			if ( p->exponent > p->next->exponent )
			{
				Swap2Position( h, p, p->next );
			}
			else if ( p->exponent == p->next->exponent )
			{
				Union2Position( p, p->next );
			}
			else
			{
				p = p->next; 
			}
		}
	}
	return;
} 

/* 交换两个相邻的结点 */
void Swap2Position( Position h, Position p1, Position p2 )
{
	Position p0;
	p0 = FindPrevious( h, p1 );
	p1->next = p2->next;
	p2->next = p1;
	p0->next = p2;
	return;
} 

/* 合并两个次数相同的结点 */
void Union2Position( Position p1, Position p2 )
{
	if ( p1->exponent == p2->exponent )
	{
		p1->coefficient = p1->coefficient + p2->coefficient;
		p1->next = p2->next; 
		free( p2 );
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值