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 );
}
}